From f15a0689be944aaacbadc96e75a738ccfc4fc928 Mon Sep 17 00:00:00 2001 From: Derock Date: Thu, 10 Aug 2023 20:47:58 -0700 Subject: [PATCH 1/4] wip: move to monorepo structure --- .gitignore | 5 +- .moon/toolchain.yml | 68 + .moon/workspace.yml | 16 + packages/discord-components-core/.npmignore | 0 packages/discord-components-core/CHANGELOG.md | 474 ++++++ packages/discord-components-core/README.md | 430 ++++++ packages/discord-components-core/package.json | 87 ++ .../discord-components-core/pnpm-lock.yaml | 256 ++++ .../scripts/replaceImportInPolyfills.cjs | 14 + .../discord-components-core/src/Fragment.tsx | 5 + .../src/components.d.ts | 1324 +++++++++++++++++ .../components/author-info/author-info.css | 76 + .../components/author-info/author-info.tsx | 74 + .../discord-action-row/discord-action-row.css | 4 + .../discord-action-row/discord-action-row.tsx | 15 + .../components/discord-action-row/readme.md | 7 + .../discord-attachment/discord-attachment.css | 86 ++ .../discord-attachment/discord-attachment.tsx | 130 ++ .../components/discord-attachment/readme.md | 18 + .../discord-attachments.css | 17 + .../discord-attachments.tsx | 15 + .../components/discord-attachments/readme.md | 7 + .../components/discord-bold/discord-bold.tsx | 14 + .../src/components/discord-bold/readme.md | 7 + .../discord-button/discord-button.css | 72 + .../discord-button/discord-button.tsx | 81 + .../src/components/discord-button/readme.md | 17 + .../discord-code-block/discord-code-block.css | 39 + .../discord-code-block/discord-code-block.tsx | 31 + .../components/discord-code-block/readme.md | 14 + .../discord-command/discord-command.css | 15 + .../discord-command/discord-command.tsx | 79 + .../src/components/discord-command/readme.md | 17 + .../discord-custom-emoji.css | 27 + .../discord-custom-emoji.tsx | 66 + .../components/discord-custom-emoji/readme.md | 16 + .../discord-embed-description.css | 67 + .../discord-embed-description.tsx | 27 + .../discord-embed-description/readme.md | 7 + .../discord-embed-field.css | 38 + .../discord-embed-field.tsx | 97 ++ .../components/discord-embed-field/readme.md | 15 + .../discord-embed-fields.css | 6 + .../discord-embed-fields.tsx | 15 + .../components/discord-embed-fields/readme.md | 7 + .../discord-embed-footer.css | 31 + .../discord-embed-footer.tsx | 56 + .../components/discord-embed-footer/readme.md | 14 + .../discord-embed/discord-embed.css | 185 +++ .../discord-embed/discord-embed.tsx | 194 +++ .../src/components/discord-embed/readme.md | 22 + .../discord-header/discord-header.css | 40 + .../discord-header/discord-header.tsx | 54 + .../src/components/discord-header/readme.md | 15 + .../discord-inline-code.tsx | 14 + .../components/discord-inline-code/readme.md | 7 + .../discord-invite/discord-invite.css | 180 +++ .../discord-invite/discord-invite.tsx | 114 ++ .../src/components/discord-invite/readme.md | 21 + .../discord-italic/discord-italic.tsx | 14 + .../src/components/discord-italic/readme.md | 7 + .../discord-mention/discord-mention.css | 49 + .../discord-mention/discord-mention.tsx | 118 ++ .../src/components/discord-mention/readme.md | 15 + .../discord-message/discord-message.css | 290 ++++ .../discord-message/discord-message.tsx | 225 +++ .../src/components/discord-message/readme.md | 27 + .../discord-messages/discord-messages.css | 48 + .../discord-messages/discord-messages.tsx | 58 + .../src/components/discord-messages/readme.md | 15 + .../discord-quote/discord-quote.css | 22 + .../discord-quote/discord-quote.tsx | 18 + .../src/components/discord-quote/readme.md | 7 + .../discord-reaction/discord-reaction.css | 71 + .../discord-reaction/discord-reaction.tsx | 76 + .../src/components/discord-reaction/readme.md | 17 + .../discord-reactions/discord-reactions.css | 9 + .../discord-reactions/discord-reactions.tsx | 15 + .../components/discord-reactions/readme.md | 7 + .../discord-reply/discord-reply.css | 146 ++ .../discord-reply/discord-reply.tsx | 155 ++ .../src/components/discord-reply/readme.md | 24 + .../discord-spoiler/discord-spoiler.css | 26 + .../discord-spoiler/discord-spoiler.tsx | 22 + .../src/components/discord-spoiler/readme.md | 7 + .../discord-system-message.css | 140 ++ .../discord-system-message.tsx | 132 ++ .../discord-system-message/readme.md | 15 + .../discord-tenor-video.css | 34 + .../discord-tenor-video.tsx | 41 + .../components/discord-tenor-video/readme.md | 15 + .../discord-thread-message.css | 81 + .../discord-thread-message.tsx | 105 ++ .../discord-thread-message/readme.md | 21 + .../discord-thread/discord-thread.css | 61 + .../discord-thread/discord-thread.tsx | 41 + .../src/components/discord-thread/readme.md | 14 + .../components/discord-time/discord-time.css | 5 + .../components/discord-time/discord-time.tsx | 97 ++ .../src/components/discord-time/readme.md | 14 + .../discord-underlined/discord-underlined.tsx | 14 + .../components/discord-underlined/readme.md | 7 + .../src/components/svgs/attachment-reply.tsx | 12 + .../src/components/svgs/boost.tsx | 10 + .../src/components/svgs/channel-forum.tsx | 14 + .../src/components/svgs/channel-icon.tsx | 14 + .../src/components/svgs/channel-thread.tsx | 16 + .../src/components/svgs/command-icon.tsx | 9 + .../src/components/svgs/command-reply.tsx | 14 + .../src/components/svgs/dm-call.tsx | 13 + .../src/components/svgs/dm-edit.tsx | 15 + .../src/components/svgs/dm-missed-call.tsx | 15 + .../src/components/svgs/ephemeral.tsx | 16 + .../src/components/svgs/guild-badge.tsx | 13 + .../src/components/svgs/launch-icon.tsx | 13 + .../components/svgs/locked-voice-channel.tsx | 13 + .../components/svgs/partner-badge-overlay.tsx | 16 + .../src/components/svgs/pin.tsx | 12 + .../src/components/svgs/reply-icon.tsx | 12 + .../src/components/svgs/system-alert.tsx | 14 + .../src/components/svgs/system-error.tsx | 13 + .../src/components/svgs/thread.tsx | 16 + .../src/components/svgs/user-join.tsx | 12 + .../src/components/svgs/user-leave.tsx | 12 + .../svgs/verified-badge-overlay.tsx | 9 + .../src/components/svgs/verified-tick.tsx | 9 + .../src/components/svgs/voice-channel.tsx | 15 + .../discord-components-core/src/index.html | 597 ++++++++ packages/discord-components-core/src/index.ts | 2 + .../discord-components-core/src/options.ts | 65 + packages/discord-components-core/src/util.ts | 22 + .../static/aichansmile.png | Bin 0 -> 17589 bytes .../static/avafive.png | Bin 0 -> 60818 bytes .../static/avafour.png | Bin 0 -> 43796 bytes .../discord-components-core/static/avaone.png | Bin 0 -> 45081 bytes .../static/avathree.png | Bin 0 -> 42152 bytes .../discord-components-core/static/avatwo.png | Bin 0 -> 46727 bytes .../static/blobparty.gif | Bin 0 -> 15843 bytes .../static/booster.png | Bin 0 -> 935 bytes .../static/diamond.png | Bin 0 -> 9847 bytes .../static/discordjs.png | Bin 0 -> 4788 bytes .../static/dragonite.png | Bin 0 -> 140304 bytes .../discord-components-core/static/eyes.svg | 1 + .../static/pikawow.png | Bin 0 -> 18631 bytes .../static/sapphire.png | Bin 0 -> 5996 bytes .../discord-components-core/static/skyra.png | Bin 0 -> 68984 bytes .../static/skyralounge.gif | Bin 0 -> 271190 bytes .../static/stencil.png | Bin 0 -> 5580 bytes .../discord-components-core/static/tcd.png | Bin 0 -> 9569 bytes .../static/thumbsup.svg | 1 + .../discord-components-core/stencil.config.ts | 31 + .../discord-components-core/tsconfig.json | 10 + .../discord-components-react/CHANGELOG.md | 386 +++++ packages/discord-components-react/README.md | 291 ++++ .../discord-components-react/package.json | 67 + .../discord-components-react/pnpm-lock.yaml | 247 +++ .../scripts/clean.mjs | 9 + .../scripts/replaceDefaultMod.cjs | 9 + .../discord-components-react/src/index.ts | 47 + .../react-component-lib/createComponent.tsx | 98 ++ .../createOverlayComponent.tsx | 142 ++ .../src/react-component-lib/index.ts | 2 + .../src/react-component-lib/interfaces.ts | 34 + .../react-component-lib/utils/attachProps.ts | 106 ++ .../src/react-component-lib/utils/case.ts | 7 + .../src/react-component-lib/utils/dev.ts | 14 + .../src/react-component-lib/utils/index.tsx | 43 + .../discord-components-react/tsconfig.json | 12 + .../discord-html-transcripts/README.md | 0 .../package-lock.json | 0 .../discord-html-transcripts/package.json | 0 .../src}/generator/index.tsx | 0 .../src}/generator/renderers/attachment.tsx | 0 .../src}/generator/renderers/components.tsx | 0 .../src}/generator/renderers/content.tsx | 0 .../src}/generator/renderers/embed.tsx | 0 .../src}/generator/renderers/message.tsx | 0 .../src}/generator/renderers/reply.tsx | 0 .../generator/renderers/systemMessage.tsx | 0 .../discord-html-transcripts/src}/index.ts | 0 .../src}/static/client.ts | 0 .../discord-html-transcripts/src}/types.ts | 0 .../src}/utils/buildProfiles.ts | 0 .../src}/utils/embeds.ts | 0 .../src}/utils/extend.ts | 0 .../src}/utils/types.d.ts | 0 .../src}/utils/utils.ts | 0 .../discord-html-transcripts/tests}/README.md | 0 .../tests}/generate.ts | 0 189 files changed, 9743 insertions(+), 1 deletion(-) create mode 100644 .moon/toolchain.yml create mode 100644 .moon/workspace.yml create mode 100644 packages/discord-components-core/.npmignore create mode 100644 packages/discord-components-core/CHANGELOG.md create mode 100644 packages/discord-components-core/README.md create mode 100644 packages/discord-components-core/package.json create mode 100644 packages/discord-components-core/pnpm-lock.yaml create mode 100644 packages/discord-components-core/scripts/replaceImportInPolyfills.cjs create mode 100644 packages/discord-components-core/src/Fragment.tsx create mode 100644 packages/discord-components-core/src/components.d.ts create mode 100644 packages/discord-components-core/src/components/author-info/author-info.css create mode 100644 packages/discord-components-core/src/components/author-info/author-info.tsx create mode 100644 packages/discord-components-core/src/components/discord-action-row/discord-action-row.css create mode 100644 packages/discord-components-core/src/components/discord-action-row/discord-action-row.tsx create mode 100644 packages/discord-components-core/src/components/discord-action-row/readme.md create mode 100644 packages/discord-components-core/src/components/discord-attachment/discord-attachment.css create mode 100644 packages/discord-components-core/src/components/discord-attachment/discord-attachment.tsx create mode 100644 packages/discord-components-core/src/components/discord-attachment/readme.md create mode 100644 packages/discord-components-core/src/components/discord-attachments/discord-attachments.css create mode 100644 packages/discord-components-core/src/components/discord-attachments/discord-attachments.tsx create mode 100644 packages/discord-components-core/src/components/discord-attachments/readme.md create mode 100644 packages/discord-components-core/src/components/discord-bold/discord-bold.tsx create mode 100644 packages/discord-components-core/src/components/discord-bold/readme.md create mode 100644 packages/discord-components-core/src/components/discord-button/discord-button.css create mode 100644 packages/discord-components-core/src/components/discord-button/discord-button.tsx create mode 100644 packages/discord-components-core/src/components/discord-button/readme.md create mode 100644 packages/discord-components-core/src/components/discord-code-block/discord-code-block.css create mode 100644 packages/discord-components-core/src/components/discord-code-block/discord-code-block.tsx create mode 100644 packages/discord-components-core/src/components/discord-code-block/readme.md create mode 100644 packages/discord-components-core/src/components/discord-command/discord-command.css create mode 100644 packages/discord-components-core/src/components/discord-command/discord-command.tsx create mode 100644 packages/discord-components-core/src/components/discord-command/readme.md create mode 100644 packages/discord-components-core/src/components/discord-custom-emoji/discord-custom-emoji.css create mode 100644 packages/discord-components-core/src/components/discord-custom-emoji/discord-custom-emoji.tsx create mode 100644 packages/discord-components-core/src/components/discord-custom-emoji/readme.md create mode 100644 packages/discord-components-core/src/components/discord-embed-description/discord-embed-description.css create mode 100644 packages/discord-components-core/src/components/discord-embed-description/discord-embed-description.tsx create mode 100644 packages/discord-components-core/src/components/discord-embed-description/readme.md create mode 100644 packages/discord-components-core/src/components/discord-embed-field/discord-embed-field.css create mode 100644 packages/discord-components-core/src/components/discord-embed-field/discord-embed-field.tsx create mode 100644 packages/discord-components-core/src/components/discord-embed-field/readme.md create mode 100644 packages/discord-components-core/src/components/discord-embed-fields/discord-embed-fields.css create mode 100644 packages/discord-components-core/src/components/discord-embed-fields/discord-embed-fields.tsx create mode 100644 packages/discord-components-core/src/components/discord-embed-fields/readme.md create mode 100644 packages/discord-components-core/src/components/discord-embed-footer/discord-embed-footer.css create mode 100644 packages/discord-components-core/src/components/discord-embed-footer/discord-embed-footer.tsx create mode 100644 packages/discord-components-core/src/components/discord-embed-footer/readme.md create mode 100644 packages/discord-components-core/src/components/discord-embed/discord-embed.css create mode 100644 packages/discord-components-core/src/components/discord-embed/discord-embed.tsx create mode 100644 packages/discord-components-core/src/components/discord-embed/readme.md create mode 100644 packages/discord-components-core/src/components/discord-header/discord-header.css create mode 100644 packages/discord-components-core/src/components/discord-header/discord-header.tsx create mode 100644 packages/discord-components-core/src/components/discord-header/readme.md create mode 100644 packages/discord-components-core/src/components/discord-inline-code/discord-inline-code.tsx create mode 100644 packages/discord-components-core/src/components/discord-inline-code/readme.md create mode 100644 packages/discord-components-core/src/components/discord-invite/discord-invite.css create mode 100644 packages/discord-components-core/src/components/discord-invite/discord-invite.tsx create mode 100644 packages/discord-components-core/src/components/discord-invite/readme.md create mode 100644 packages/discord-components-core/src/components/discord-italic/discord-italic.tsx create mode 100644 packages/discord-components-core/src/components/discord-italic/readme.md create mode 100644 packages/discord-components-core/src/components/discord-mention/discord-mention.css create mode 100644 packages/discord-components-core/src/components/discord-mention/discord-mention.tsx create mode 100644 packages/discord-components-core/src/components/discord-mention/readme.md create mode 100644 packages/discord-components-core/src/components/discord-message/discord-message.css create mode 100644 packages/discord-components-core/src/components/discord-message/discord-message.tsx create mode 100644 packages/discord-components-core/src/components/discord-message/readme.md create mode 100644 packages/discord-components-core/src/components/discord-messages/discord-messages.css create mode 100644 packages/discord-components-core/src/components/discord-messages/discord-messages.tsx create mode 100644 packages/discord-components-core/src/components/discord-messages/readme.md create mode 100644 packages/discord-components-core/src/components/discord-quote/discord-quote.css create mode 100644 packages/discord-components-core/src/components/discord-quote/discord-quote.tsx create mode 100644 packages/discord-components-core/src/components/discord-quote/readme.md create mode 100644 packages/discord-components-core/src/components/discord-reaction/discord-reaction.css create mode 100644 packages/discord-components-core/src/components/discord-reaction/discord-reaction.tsx create mode 100644 packages/discord-components-core/src/components/discord-reaction/readme.md create mode 100644 packages/discord-components-core/src/components/discord-reactions/discord-reactions.css create mode 100644 packages/discord-components-core/src/components/discord-reactions/discord-reactions.tsx create mode 100644 packages/discord-components-core/src/components/discord-reactions/readme.md create mode 100644 packages/discord-components-core/src/components/discord-reply/discord-reply.css create mode 100644 packages/discord-components-core/src/components/discord-reply/discord-reply.tsx create mode 100644 packages/discord-components-core/src/components/discord-reply/readme.md create mode 100644 packages/discord-components-core/src/components/discord-spoiler/discord-spoiler.css create mode 100644 packages/discord-components-core/src/components/discord-spoiler/discord-spoiler.tsx create mode 100644 packages/discord-components-core/src/components/discord-spoiler/readme.md create mode 100644 packages/discord-components-core/src/components/discord-system-message/discord-system-message.css create mode 100644 packages/discord-components-core/src/components/discord-system-message/discord-system-message.tsx create mode 100644 packages/discord-components-core/src/components/discord-system-message/readme.md create mode 100644 packages/discord-components-core/src/components/discord-tenor-video/discord-tenor-video.css create mode 100644 packages/discord-components-core/src/components/discord-tenor-video/discord-tenor-video.tsx create mode 100644 packages/discord-components-core/src/components/discord-tenor-video/readme.md create mode 100644 packages/discord-components-core/src/components/discord-thread-message/discord-thread-message.css create mode 100644 packages/discord-components-core/src/components/discord-thread-message/discord-thread-message.tsx create mode 100644 packages/discord-components-core/src/components/discord-thread-message/readme.md create mode 100644 packages/discord-components-core/src/components/discord-thread/discord-thread.css create mode 100644 packages/discord-components-core/src/components/discord-thread/discord-thread.tsx create mode 100644 packages/discord-components-core/src/components/discord-thread/readme.md create mode 100644 packages/discord-components-core/src/components/discord-time/discord-time.css create mode 100644 packages/discord-components-core/src/components/discord-time/discord-time.tsx create mode 100644 packages/discord-components-core/src/components/discord-time/readme.md create mode 100644 packages/discord-components-core/src/components/discord-underlined/discord-underlined.tsx create mode 100644 packages/discord-components-core/src/components/discord-underlined/readme.md create mode 100644 packages/discord-components-core/src/components/svgs/attachment-reply.tsx create mode 100644 packages/discord-components-core/src/components/svgs/boost.tsx create mode 100644 packages/discord-components-core/src/components/svgs/channel-forum.tsx create mode 100644 packages/discord-components-core/src/components/svgs/channel-icon.tsx create mode 100644 packages/discord-components-core/src/components/svgs/channel-thread.tsx create mode 100644 packages/discord-components-core/src/components/svgs/command-icon.tsx create mode 100644 packages/discord-components-core/src/components/svgs/command-reply.tsx create mode 100644 packages/discord-components-core/src/components/svgs/dm-call.tsx create mode 100644 packages/discord-components-core/src/components/svgs/dm-edit.tsx create mode 100644 packages/discord-components-core/src/components/svgs/dm-missed-call.tsx create mode 100644 packages/discord-components-core/src/components/svgs/ephemeral.tsx create mode 100644 packages/discord-components-core/src/components/svgs/guild-badge.tsx create mode 100644 packages/discord-components-core/src/components/svgs/launch-icon.tsx create mode 100644 packages/discord-components-core/src/components/svgs/locked-voice-channel.tsx create mode 100644 packages/discord-components-core/src/components/svgs/partner-badge-overlay.tsx create mode 100644 packages/discord-components-core/src/components/svgs/pin.tsx create mode 100644 packages/discord-components-core/src/components/svgs/reply-icon.tsx create mode 100644 packages/discord-components-core/src/components/svgs/system-alert.tsx create mode 100644 packages/discord-components-core/src/components/svgs/system-error.tsx create mode 100644 packages/discord-components-core/src/components/svgs/thread.tsx create mode 100644 packages/discord-components-core/src/components/svgs/user-join.tsx create mode 100644 packages/discord-components-core/src/components/svgs/user-leave.tsx create mode 100644 packages/discord-components-core/src/components/svgs/verified-badge-overlay.tsx create mode 100644 packages/discord-components-core/src/components/svgs/verified-tick.tsx create mode 100644 packages/discord-components-core/src/components/svgs/voice-channel.tsx create mode 100644 packages/discord-components-core/src/index.html create mode 100644 packages/discord-components-core/src/index.ts create mode 100644 packages/discord-components-core/src/options.ts create mode 100644 packages/discord-components-core/src/util.ts create mode 100644 packages/discord-components-core/static/aichansmile.png create mode 100644 packages/discord-components-core/static/avafive.png create mode 100644 packages/discord-components-core/static/avafour.png create mode 100644 packages/discord-components-core/static/avaone.png create mode 100644 packages/discord-components-core/static/avathree.png create mode 100644 packages/discord-components-core/static/avatwo.png create mode 100644 packages/discord-components-core/static/blobparty.gif create mode 100644 packages/discord-components-core/static/booster.png create mode 100644 packages/discord-components-core/static/diamond.png create mode 100644 packages/discord-components-core/static/discordjs.png create mode 100644 packages/discord-components-core/static/dragonite.png create mode 100644 packages/discord-components-core/static/eyes.svg create mode 100644 packages/discord-components-core/static/pikawow.png create mode 100644 packages/discord-components-core/static/sapphire.png create mode 100644 packages/discord-components-core/static/skyra.png create mode 100644 packages/discord-components-core/static/skyralounge.gif create mode 100644 packages/discord-components-core/static/stencil.png create mode 100644 packages/discord-components-core/static/tcd.png create mode 100644 packages/discord-components-core/static/thumbsup.svg create mode 100644 packages/discord-components-core/stencil.config.ts create mode 100644 packages/discord-components-core/tsconfig.json create mode 100644 packages/discord-components-react/CHANGELOG.md create mode 100644 packages/discord-components-react/README.md create mode 100644 packages/discord-components-react/package.json create mode 100644 packages/discord-components-react/pnpm-lock.yaml create mode 100644 packages/discord-components-react/scripts/clean.mjs create mode 100644 packages/discord-components-react/scripts/replaceDefaultMod.cjs create mode 100644 packages/discord-components-react/src/index.ts create mode 100644 packages/discord-components-react/src/react-component-lib/createComponent.tsx create mode 100644 packages/discord-components-react/src/react-component-lib/createOverlayComponent.tsx create mode 100644 packages/discord-components-react/src/react-component-lib/index.ts create mode 100644 packages/discord-components-react/src/react-component-lib/interfaces.ts create mode 100644 packages/discord-components-react/src/react-component-lib/utils/attachProps.ts create mode 100644 packages/discord-components-react/src/react-component-lib/utils/case.ts create mode 100644 packages/discord-components-react/src/react-component-lib/utils/dev.ts create mode 100644 packages/discord-components-react/src/react-component-lib/utils/index.tsx create mode 100644 packages/discord-components-react/tsconfig.json rename README.md => packages/discord-html-transcripts/README.md (100%) rename package-lock.json => packages/discord-html-transcripts/package-lock.json (100%) rename package.json => packages/discord-html-transcripts/package.json (100%) rename {src => packages/discord-html-transcripts/src}/generator/index.tsx (100%) rename {src => packages/discord-html-transcripts/src}/generator/renderers/attachment.tsx (100%) rename {src => packages/discord-html-transcripts/src}/generator/renderers/components.tsx (100%) rename {src => packages/discord-html-transcripts/src}/generator/renderers/content.tsx (100%) rename {src => packages/discord-html-transcripts/src}/generator/renderers/embed.tsx (100%) rename {src => packages/discord-html-transcripts/src}/generator/renderers/message.tsx (100%) rename {src => packages/discord-html-transcripts/src}/generator/renderers/reply.tsx (100%) rename {src => packages/discord-html-transcripts/src}/generator/renderers/systemMessage.tsx (100%) rename {src => packages/discord-html-transcripts/src}/index.ts (100%) rename {src => packages/discord-html-transcripts/src}/static/client.ts (100%) rename {src => packages/discord-html-transcripts/src}/types.ts (100%) rename {src => packages/discord-html-transcripts/src}/utils/buildProfiles.ts (100%) rename {src => packages/discord-html-transcripts/src}/utils/embeds.ts (100%) rename {src => packages/discord-html-transcripts/src}/utils/extend.ts (100%) rename {src => packages/discord-html-transcripts/src}/utils/types.d.ts (100%) rename {src => packages/discord-html-transcripts/src}/utils/utils.ts (100%) rename {tests => packages/discord-html-transcripts/tests}/README.md (100%) rename {tests => packages/discord-html-transcripts/tests}/generate.ts (100%) diff --git a/.gitignore b/.gitignore index c7637b6..a8242dc 100644 --- a/.gitignore +++ b/.gitignore @@ -178,4 +178,7 @@ dist # End of https://www.toptal.com/developers/gitignore/api/node,macos -discord-html-transcripts-*.tgz \ No newline at end of file +discord-html-transcripts-*.tgz +# moon +.moon/cache +.moon/docker diff --git a/.moon/toolchain.yml b/.moon/toolchain.yml new file mode 100644 index 0000000..b016cc6 --- /dev/null +++ b/.moon/toolchain.yml @@ -0,0 +1,68 @@ +# https://moonrepo.dev/docs/config/toolchain +$schema: 'https://moonrepo.dev/schemas/toolchain.json' + +# Extend and inherit an external configuration file. Must be a valid HTTPS URL or file system path. +# extends: './shared/toolchain.yml' + +# Configures Node.js within the toolchain. moon manages its own version of Node.js +# instead of relying on a version found on the host machine. This ensures deterministic +# and reproducible builds across any machine. +node: + # The version to use. Must be a semantic version that includes major, minor, and patch. + # We suggest using the latest active LTS version: https://nodejs.org/en/about/releases + version: '20.0.0' + + # The package manager to use when managing dependencies. + # Accepts "npm" (default), "pnpm", or "yarn". + packageManager: 'pnpm' + + # The version of the package manager (above) to use. + pnpm: {} + + # Add `node.version` as a constraint in the root `package.json` `engines`. + addEnginesConstraint: true + + # Dedupe dependencies after the lockfile has changed. + dedupeOnLockfileChange: true + + # Version format to use when syncing dependencies within the project's `package.json`. + # dependencyVersionFormat: 'workspace' + + # Infer and automatically create moon tasks from `package.json` scripts, per project. + # BEWARE: Tasks and scripts are not 1:1 in functionality, so please refer to the documentation. + inferTasksFromScripts: true + + # Sync a project's `dependsOn` as dependencies within the project's `package.json`. + syncProjectWorkspaceDependencies: true + + # Sync `node.version` to a 3rd-party version manager's config file. + # Accepts "nodenv" (.node-version), "nvm" (.nvmrc), or none. + # syncVersionManagerConfig: 'nvm' + +# Configures how moon integrates with TypeScript. +typescript: + # When `syncProjectReferences` is enabled and a dependent project reference + # *does not* have a `tsconfig.json`, automatically create one. + createMissingConfig: false + + # Name of `tsconfig.json` file in each project root. + # projectConfigFileName: 'tsconfig.json' + + # Name of `tsconfig.json` file in the workspace root. + # rootConfigFileName: 'tsconfig.json' + + # Name of the config file in the workspace root that defines shared compiler + # options for all project reference based config files. + # rootOptionsConfigFileName: 'tsconfig.options.json' + + # Update a project's `tsconfig.json` to route the `outDir` compiler option + # to moon's `.moon/cache` directory. + routeOutDirToCache: false + + # Sync a project's `dependsOn` as project references within the + # project's `tsconfig.json` and the workspace root `tsconfig.json`. + syncProjectReferences: false + + # Sync a project's project references as import aliases to the `paths` + # compiler option in each applicable project. + syncProjectReferencesToPaths: false \ No newline at end of file diff --git a/.moon/workspace.yml b/.moon/workspace.yml new file mode 100644 index 0000000..68570e3 --- /dev/null +++ b/.moon/workspace.yml @@ -0,0 +1,16 @@ +# https://moonrepo.dev/docs/config/workspace +$schema: 'https://moonrepo.dev/schemas/workspace.json' + +# Require a specific version of moon while running commands, otherwise fail. +# versionConstraint: '>=1.0.0' + +# Extend and inherit an external configuration file. Must be a valid HTTPS URL or file system path. +# extends: './shared/workspace.yml' + +# REQUIRED: A map of all projects found within the workspace, or a list or file system globs. +# When using a map, each entry requires a unique project ID as the map key, and a file system +# path to the project folder as the map value. File paths are relative from the workspace root, +# and cannot reference projects located outside the workspace boundary. +projects: + - 'apps/*' + - 'packages/*' diff --git a/packages/discord-components-core/.npmignore b/packages/discord-components-core/.npmignore new file mode 100644 index 0000000..e69de29 diff --git a/packages/discord-components-core/CHANGELOG.md b/packages/discord-components-core/CHANGELOG.md new file mode 100644 index 0000000..6e8c047 --- /dev/null +++ b/packages/discord-components-core/CHANGELOG.md @@ -0,0 +1,474 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [3.6.0](https://github.com/skyra-project/discord-components/compare/v3.5.0...v3.6.0) (2023-01-23) + +### Bug Fixes + +- update @stencil/core dependency ([df07642](https://github.com/skyra-project/discord-components/commit/df07642b48debf1ecbc05cceaeafd5cfed081c9a)) + +### Features + +- add pin icon to system messages ([#317](https://github.com/skyra-project/discord-components/issues/317)) ([b34d635](https://github.com/skyra-project/discord-components/commit/b34d6357e02467ad4843a64591897e6b5ea99b22)) + +# [3.5.0](https://github.com/skyra-project/discord-components/compare/v3.4.1...v3.5.0) (2022-12-27) + +### Bug Fixes + +- change to bunny font cdn and update font families ([10184ab](https://github.com/skyra-project/discord-components/commit/10184abd60de16977f9e88c595b93a44ac3521a4)), closes [#308](https://github.com/skyra-project/discord-components/issues/308) +- **deps:** update all non-major dependencies ([#283](https://github.com/skyra-project/discord-components/issues/283)) ([8c225c4](https://github.com/skyra-project/discord-components/commit/8c225c4630b68d58f87d71250cc3aa984e623458)) +- **deps:** update all non-major dependencies ([#290](https://github.com/skyra-project/discord-components/issues/290)) ([185ef07](https://github.com/skyra-project/discord-components/commit/185ef075f614d00e3e5a0f6be375f28bd6496721)) +- **deps:** update all non-major dependencies ([#296](https://github.com/skyra-project/discord-components/issues/296)) ([58a4aa2](https://github.com/skyra-project/discord-components/commit/58a4aa2794d9241d85a7a071a3c46a74d0a3460f)) +- **deps:** update all non-major dependencies ([#302](https://github.com/skyra-project/discord-components/issues/302)) ([7642c51](https://github.com/skyra-project/discord-components/commit/7642c51868c557c0b8145cf26a040e726204a875)) +- **deps:** update all non-major dependencies ([#305](https://github.com/skyra-project/discord-components/issues/305)) ([68ae3f6](https://github.com/skyra-project/discord-components/commit/68ae3f63dc61e06f449805e4829e2eaa30e11541)) +- resolved typo in `ChannelForum` ([#289](https://github.com/skyra-project/discord-components/issues/289)) ([c30908d](https://github.com/skyra-project/discord-components/commit/c30908d5395561e0b77cfebaad7822c98ef8b0fe)) + +### Features + +- mention for slash commands ([#288](https://github.com/skyra-project/discord-components/issues/288)) ([294d0b5](https://github.com/skyra-project/discord-components/commit/294d0b5c926a96f0759bff5dfd703432cf6791d8)) + +## [3.4.1](https://github.com/skyra-project/discord-components/compare/v3.4.0...v3.4.1) (2022-08-06) + +### Bug Fixes + +- **core:** enable `experimentalImportInjection` to ensure compatibility with Vite/NextJS builds ([053c8eb](https://github.com/skyra-project/discord-components/commit/053c8eb52ecf9cb763afd39441f11fdf81e76e21)) +- **deps:** update all non-major dependencies ([#271](https://github.com/skyra-project/discord-components/issues/271)) ([7896b9c](https://github.com/skyra-project/discord-components/commit/7896b9cfa081cbfa746bf9714db6cac31dfdc9bd)) + +# [3.4.0](https://github.com/skyra-project/discord-components/compare/v3.3.1...v3.4.0) (2022-05-10) + +### Features + +- add forum mention icon ([#244](https://github.com/skyra-project/discord-components/issues/244)) ([eea0ee7](https://github.com/skyra-project/discord-components/commit/eea0ee70698637054f2685ea03179ad9a126f451)) +- add OP tag to profiles (+ author info style fixes) ([#245](https://github.com/skyra-project/discord-components/issues/245)) ([9206d4f](https://github.com/skyra-project/discord-components/commit/9206d4f5e7cca47a3f1c6df4e2854519ff3dada0)) +- add role icons ([#243](https://github.com/skyra-project/discord-components/issues/243)) ([b2a4dd0](https://github.com/skyra-project/discord-components/commit/b2a4dd077a49bfa8a032e13eeea9c871c5c3ebd4)) + +## [3.3.1](https://github.com/skyra-project/discord-components/compare/v3.3.0...v3.3.1) (2022-04-25) + +### Bug Fixes + +- **core:** emit `[@vite-ignore](https://github.com/vite-ignore)` comments on dynamic imports ([ba84b9e](https://github.com/skyra-project/discord-components/commit/ba84b9ec4e8fe81ec452aba4c89b7b481b00ccaa)) +- **deps:** update all non-major dependencies ([#240](https://github.com/skyra-project/discord-components/issues/240)) ([e0e22fe](https://github.com/skyra-project/discord-components/commit/e0e22fe72158f1e9f92d61a5b04c58b7bf546de5)) + +# [3.3.0](https://github.com/skyra-project/discord-components/compare/v3.2.0...v3.3.0) (2022-04-06) + +### Features + +- add `discord-time` component ([#229](https://github.com/skyra-project/discord-components/issues/229)) ([cdf0810](https://github.com/skyra-project/discord-components/commit/cdf08108e9a54e11c75e050ff176a42715aceb49)) +- add ephemeral messages and highlight fixes ([#230](https://github.com/skyra-project/discord-components/issues/230)) ([c5fc8f3](https://github.com/skyra-project/discord-components/commit/c5fc8f39bdecc54ad9daca1eb69115c9402e9da3)) + +# [3.2.0](https://github.com/skyra-project/discord-components/compare/v3.1.1...v3.2.0) (2022-04-04) + +### Bug Fixes + +- **deps:** update all non-major dependencies ([#217](https://github.com/skyra-project/discord-components/issues/217)) ([3c391b6](https://github.com/skyra-project/discord-components/commit/3c391b68a28084ba514d9e5a8c3666fb7d456166)) +- **deps:** update all non-major dependencies ([#225](https://github.com/skyra-project/discord-components/issues/225)) ([87349f3](https://github.com/skyra-project/discord-components/commit/87349f3355c89c9c055ced1be7750f0251085132)) + +### Features + +- added multiple style specific components ([80ed132](https://github.com/skyra-project/discord-components/commit/80ed1326ea075cbe142cc8bc400d2f54a5bfaf30)), closes [#220](https://github.com/skyra-project/discord-components/issues/220) + +## [3.1.1](https://github.com/skyra-project/discord-components/compare/v3.1.0...v3.1.1) (2022-03-10) + +### Bug Fixes + +- bump `@stencil/core` dependency ([ecca4d8](https://github.com/skyra-project/discord-components/commit/ecca4d812ae371b57415c09fae7b5c8fa842700c)) +- **deps:** update all non-major dependencies ([#200](https://github.com/skyra-project/discord-components/issues/200)) ([c95dd81](https://github.com/skyra-project/discord-components/commit/c95dd81b03c042e695dd21db3c62c7137a4426f1)) +- **deps:** update all non-major dependencies ([#209](https://github.com/skyra-project/discord-components/issues/209)) ([2c0dd8a](https://github.com/skyra-project/discord-components/commit/2c0dd8a550ef78d23cf969597a3f08d7fb5c65ba)) +- match rebranded syles ([#216](https://github.com/skyra-project/discord-components/issues/216)) ([7ea32a9](https://github.com/skyra-project/discord-components/commit/7ea32a965557953416ad5f66ddbefed4a641c0fe)) + +# [3.1.0](https://github.com/skyra-project/discord-components/compare/v3.0.1...v3.1.0) (2022-01-12) + +### Features + +- **discord-embed-description:** add styles for nested HTML tags ([#195](https://github.com/skyra-project/discord-components/issues/195)) ([6ee7b9f](https://github.com/skyra-project/discord-components/commit/6ee7b9ffea10cfb0ed82a5771b88017060f04711)) + +## [3.0.1](https://github.com/skyra-project/discord-components/compare/v3.0.0...v3.0.1) (2022-01-08) + +**Note:** Version bump only for package @skyra/discord-components-core + +# [3.0.0](https://github.com/skyra-project/discord-components/compare/v2.13.0...v3.0.0) (2022-01-08) + +### Bug Fixes + +- fixed embed description and footer disappearing when dynamically editing title ([bdec29c](https://github.com/skyra-project/discord-components/commit/bdec29c1999969a2ea0cf1198d3eb1986a80d674)) + +### BREAKING CHANGES + +- `discord-embed` no longer takes the properties `footer-image` and `timestamp`, they are moved to the `discord-embed-footer` component. +- The embed description now has to go into its own component, `discord-embed-description` + +```diff + +- Custom emojis in the embed description: ++ Custom emojis in the embed description: + +``` + +- The embed footer now has to go into its own component, `discord-embed-footer` + +```diff +- ++ +{ /* other embed components */ } +- Open source libraries to aid in the creation of Discord bots ++ ++ Open source libraries to aid in the creation of Discord bots ++ + +``` + +# [2.13.0](https://github.com/skyra-project/discord-components/compare/v2.12.1...v2.13.0) (2021-12-22) + +### Bug Fixes + +- **deps:** update all non-major dependencies ([#184](https://github.com/skyra-project/discord-components/issues/184)) ([792e791](https://github.com/skyra-project/discord-components/commit/792e791bba008eacea279b7802da506e9fb64a68)) + +### Features + +- **discord-invite:** localization support for invite title and button ([#183](https://github.com/skyra-project/discord-components/issues/183)) ([8fd541b](https://github.com/skyra-project/discord-components/commit/8fd541b60b8157aae26748b5400b647753594578)) + +## [2.12.1](https://github.com/skyra-project/discord-components/compare/v2.12.0...v2.12.1) (2021-12-06) + +### Bug Fixes + +- **deps:** update all non-major dependencies ([#177](https://github.com/skyra-project/discord-components/issues/177)) ([36a4c5d](https://github.com/skyra-project/discord-components/commit/36a4c5d871b08418ff96bcf471035bdb19f73598)) +- **discord-embed:** hide embed description when not provided ([f3f3302](https://github.com/skyra-project/discord-components/commit/f3f33029ca62f4517de8dfc3051855b36d8485db)), closes [#180](https://github.com/skyra-project/discord-components/issues/180) + +# [2.12.0](https://github.com/skyra-project/discord-components/compare/v2.11.6...v2.12.0) (2021-11-13) + +### Features + +- Add `discord-custom-emoji` component & custom emojis in embed titles ([#168](https://github.com/skyra-project/discord-components/issues/168)) ([61a808e](https://github.com/skyra-project/discord-components/commit/61a808e46f16d3ce9c7ea888e208cd1fcbe30e75)), closes [#163](https://github.com/skyra-project/discord-components/issues/163) + +## [2.11.6](https://github.com/skyra-project/discord-components/compare/v2.11.5...v2.11.6) (2021-11-08) + +**Note:** Version bump only for package @skyra/discord-components-core + +## [2.11.4](https://github.com/skyra-project/discord-components/compare/v2.11.3...v2.11.4) (2021-11-08) + +### Bug Fixes + +- **docs:** update nextjs codesandbox link ([4d6382f](https://github.com/skyra-project/discord-components/commit/4d6382fe3538f85cd60ea8aa28e570023b536c98)) + +## [2.11.3](https://github.com/skyra-project/discord-components/compare/v2.11.3-alpha.3...v2.11.3) (2021-11-08) + +**Note:** Version bump only for package @skyra/discord-components-core + +## [2.11.3-alpha.3](https://github.com/skyra-project/discord-components/compare/v2.11.3-alpha.2...v2.11.3-alpha.3) (2021-11-08) + +**Note:** Version bump only for package @skyra/discord-components-core + +## [2.11.3-alpha.2](https://github.com/skyra-project/discord-components/compare/v2.11.3-alpha.1...v2.11.3-alpha.2) (2021-11-08) + +**Note:** Version bump only for package @skyra/discord-components-core + +## [2.11.3-alpha.1](https://github.com/skyra-project/discord-components/compare/v2.11.3-alpha.0...v2.11.3-alpha.1) (2021-11-08) + +### Bug Fixes + +- debump required nodejs engine to 14.0.0 ([310f9bc](https://github.com/skyra-project/discord-components/commit/310f9bc6cdcafe6fd0d7267ffff70539b981b4be)) + +## [2.11.3-alpha.0](https://github.com/skyra-project/discord-components/compare/v2.11.2...v2.11.3-alpha.0) (2021-11-08) + +### Bug Fixes + +- **deps:** update all non-major dependencies ([#158](https://github.com/skyra-project/discord-components/issues/158)) ([069255e](https://github.com/skyra-project/discord-components/commit/069255edf3b42b7549cb8a5382fc8f8899a95ac2)) +- **deps:** update all non-major dependencies ([#166](https://github.com/skyra-project/discord-components/issues/166)) ([8d22036](https://github.com/skyra-project/discord-components/commit/8d22036549cca3f7eb2518ac14deda46902f5d55)) + +## [2.11.2](https://github.com/skyra-project/discord-components/compare/v2.11.1...v2.11.2) (2021-10-03) + +**Note:** Version bump only for package @skyra/discord-components-core + +## [2.11.1](https://github.com/skyra-project/discord-components/compare/v2.11.0...v2.11.1) (2021-10-03) + +**Note:** Version bump only for package @skyra/discord-components-core + +# [2.11.0](https://github.com/skyra-project/discord-components/compare/v2.10.1-alpha.0...v2.11.0) (2021-10-02) + +### Features + +- Thread Accessories ([#150](https://github.com/skyra-project/discord-components/issues/150)) ([232f05d](https://github.com/skyra-project/discord-components/commit/232f05d915fef41486150e2db43589e9fc11c742)) +- Use channel icons in mentions ([#151](https://github.com/skyra-project/discord-components/issues/151)) ([b3fe40d](https://github.com/skyra-project/discord-components/commit/b3fe40dfbfce68df531e38908d28efacb21cc61b)) + +## [2.10.1-alpha.0](https://github.com/skyra-project/discord-components/compare/v2.10.0...v2.10.1-alpha.0) (2021-09-21) + +**Note:** Version bump only for package @skyra/discord-components-core + +# [2.10.0](https://github.com/skyra-project/discord-components/compare/v2.9.1...v2.10.0) (2021-09-12) + +### Features + +- add `discord-tenor-video` component ([#127](https://github.com/skyra-project/discord-components/issues/127)) ([c90dde0](https://github.com/skyra-project/discord-components/commit/c90dde02c23b8c9d25c676249518c60daeaf5d58)) + +## [2.9.1](https://github.com/skyra-project/discord-components/compare/v2.9.1-alpha.0...v2.9.1) (2021-09-12) + +**Note:** Version bump only for package @skyra/discord-components-core + +## [2.9.1-alpha.0](https://github.com/skyra-project/discord-components/compare/v2.9.0...v2.9.1-alpha.0) (2021-09-10) + +**Note:** Version bump only for package @skyra/discord-components-core + +# [2.9.0](https://github.com/skyra-project/discord-components/compare/v2.8.1...v2.9.0) (2021-09-05) + +### Features + +- **discord-mention:** add new thread type ([#117](https://github.com/skyra-project/discord-components/issues/117)) ([3719679](https://github.com/skyra-project/discord-components/commit/371967908b60421a67fd72ad3ad5ec4adab932a2)) + +## [2.8.1](https://github.com/skyra-project/discord-components/compare/v2.8.0...v2.8.1) (2021-08-18) + +### Bug Fixes + +- **discord-command:** remove prepending slash in names ([#111](https://github.com/skyra-project/discord-components/issues/111)) ([c86a17e](https://github.com/skyra-project/discord-components/commit/c86a17ea3494fb050914bddbb385e375fea60876)) + +# [2.8.0](https://github.com/skyra-project/discord-components/compare/v2.7.1...v2.8.0) (2021-08-18) + +### Bug Fixes + +- use proper URLs for discord avatars ([#108](https://github.com/skyra-project/discord-components/issues/108)) ([446cdf4](https://github.com/skyra-project/discord-components/commit/446cdf4863d7e027cd2f08c6b9600e07491cfae2)) + +### Features + +- add component buttons ([#110](https://github.com/skyra-project/discord-components/issues/110)) ([50f78c5](https://github.com/skyra-project/discord-components/commit/50f78c5643277164e791261f8a8af76a8d893015)) + +## [2.7.1](https://github.com/skyra-project/discord-components/compare/v2.7.0...v2.7.1) (2021-08-07) + +**Note:** Version bump only for package @skyra/discord-components-core + +# [2.7.0](https://github.com/skyra-project/discord-components/compare/v2.6.0...v2.7.0) (2021-08-07) + +### Features + +- add system messages ([#105](https://github.com/skyra-project/discord-components/issues/105)) ([53440f4](https://github.com/skyra-project/discord-components/commit/53440f44cbe30d7458cc9e38f30c7636483b4a7a)) + +# [2.6.0](https://github.com/skyra-project/discord-components/compare/v2.5.0...v2.6.0) (2021-08-05) + +### Bug Fixes + +- specify string union type for DiscordMention#type prop ([3b8204e](https://github.com/skyra-project/discord-components/commit/3b8204e11bdbe41b17bd2963f6afa11d6e903511)) + +### Features + +- add replies (+ style changes) ([#103](https://github.com/skyra-project/discord-components/issues/103)) ([065e452](https://github.com/skyra-project/discord-components/commit/065e452f9d0386dfd1b426793aca4c7f07c9c0ae)) + +# [2.5.0](https://github.com/skyra-project/discord-components/compare/v2.4.0...v2.5.0) (2021-08-04) + +### Features + +- add locked type for mentions ([#102](https://github.com/skyra-project/discord-components/issues/102)) ([e70a5bb](https://github.com/skyra-project/discord-components/commit/e70a5bb242ed695352e5088f6434574dd3614678)) + +# [2.4.0](https://github.com/skyra-project/discord-components/compare/v2.3.0...v2.4.0) (2021-07-25) + +### Features + +- add option to make reactions non-interactive ([b5f61b0](https://github.com/skyra-project/discord-components/commit/b5f61b07ffbd5d4e547b0e8324117ad582fc6295)) + +# [2.3.0](https://github.com/skyra-project/discord-components/compare/v2.2.0...v2.3.0) (2021-07-25) + +### Features + +- add click event handler to reactions ([7686af8](https://github.com/skyra-project/discord-components/commit/7686af8653233b234315e3932e4e38c13448a6b9)) +- add reactions ([#96](https://github.com/skyra-project/discord-components/issues/96)) ([3bb19a6](https://github.com/skyra-project/discord-components/commit/3bb19a69912b9666f922c36eabe6fb959b4fc495)) +- add voice type to mentions ([#97](https://github.com/skyra-project/discord-components/issues/97)) ([9b9fcb2](https://github.com/skyra-project/discord-components/commit/9b9fcb298933405e287ded6b3df27a7f4a60c3ff)) + +# [2.2.0](https://github.com/skyra-project/discord-components/compare/v2.1.1...v2.2.0) (2021-07-22) + +### Features + +- add invite and attachments container components ([#94](https://github.com/skyra-project/discord-components/issues/94)) ([3b782a0](https://github.com/skyra-project/discord-components/commit/3b782a0147a46ce8779bd7387786a07fdc94f5ac)) + +## [2.1.1](https://github.com/skyra-project/discord-components/compare/v2.1.0...v2.1.1) (2021-07-10) + +### Bug Fixes + +- **readme:** update urls and add nextJS demo ([551f9e7](https://github.com/skyra-project/discord-components/commit/551f9e763a48b0854450054404476e6d641a77d3)) + +# [2.1.0](https://github.com/skyra-project/discord-components/compare/v2.0.9...v2.1.0) (2021-06-26) + +### Features + +- add support for server crosspost webhook messages ([a02ec25](https://github.com/skyra-project/discord-components/commit/a02ec254f6804ea76282d081a674c838a87ef396)), closes [#88](https://github.com/skyra-project/discord-components/issues/88) + +## [2.0.9](https://github.com/skyra-project/discord-components/compare/v2.0.8...v2.0.9) (2021-06-21) + +### Bug Fixes + +- **css:** update to discord rebrand colors ([fe03134](https://github.com/skyra-project/discord-components/commit/fe031344284f0e1674813dfcbc9e43a33b1b78fd)) + +## [2.0.8](https://github.com/skyra-project/discord-components/compare/v2.0.7...v2.0.8) (2021-06-21) + +### Bug Fixes + +- **docs:** add live demo for "No Framework" ([b58242f](https://github.com/skyra-project/discord-components/commit/b58242f39b7f3d316616c844ed922aa0c4834034)) +- **docs:** remove default font from ToC ([82a1281](https://github.com/skyra-project/discord-components/commit/82a1281e84c51287ad01282d399c1be530d8ab2d)) + +## [2.0.7](https://github.com/skyra-project/discord-components/compare/v2.0.7-alpha.0...v2.0.7) (2021-05-20) + +**Note:** Version bump only for package @skyra/discord-components-core + +## [2.0.7-alpha.0](https://github.com/skyra-project/discord-components/compare/v2.0.6...v2.0.7-alpha.0) (2021-05-19) + +### Bug Fixes + +- **core:** specify exports for loader ([b94604f](https://github.com/skyra-project/discord-components/commit/b94604f374ef2944786469401d1505888f6ccc05)) + +## [2.0.6](https://github.com/skyra-project/discord-components/compare/v2.0.5...v2.0.6) (2021-05-19) + +### Bug Fixes + +- specify sideEffects and fix `es2015` and `es2017` file paths ([b759b3c](https://github.com/skyra-project/discord-components/commit/b759b3c4ca9e505b49592d4152f1b5ada4876cc5)) + +## [2.0.5](https://github.com/skyra-project/discord-components/compare/v2.0.4...v2.0.5) (2021-05-15) + +### Bug Fixes + +- **core:** update mention colours to match Discord May 2021 redesign ([a7c7a84](https://github.com/skyra-project/discord-components/commit/a7c7a847082738aeb2405340e79a738ade3563db)) + +## [2.0.4](https://github.com/skyra-project/discord-components/compare/v2.0.3...v2.0.4) (2021-05-15) + +### Bug Fixes + +- change links from discord-message-components to discord-components ([5a8e1e1](https://github.com/skyra-project/discord-components/commit/5a8e1e1e0b3a34020a91f0dae9464141195d8fab)) + +## [2.0.3](https://github.com/skyra-project/discord-components/compare/v2.0.3-alpha.3...v2.0.3) (2021-05-15) + +**Note:** Version bump only for package @skyra/discord-components-core + +## [2.0.3-alpha.3](https://github.com/skyra-project/discord-components/compare/v2.0.3-alpha.2...v2.0.3-alpha.3) (2021-05-15) + +**Note:** Version bump only for package @skyra/discord-components-core + +## [2.0.3-alpha.2](https://github.com/skyra-project/discord-components/compare/v2.0.3-alpha.1...v2.0.3-alpha.2) (2021-05-15) + +### Bug Fixes + +- **react:** include polyfills again ([43ca559](https://github.com/skyra-project/discord-components/commit/43ca5590416559b92a32fb6e9cd1a53c357322a2)) + +## [2.0.3-alpha.1](https://github.com/skyra-project/discord-components/compare/v2.0.3-alpha.0...v2.0.3-alpha.1) (2021-05-15) + +### Bug Fixes + +- fixed Avatar options ([2b97ca8](https://github.com/skyra-project/discord-components/commit/2b97ca80c89e64ad00ffb7f5660fbeed91bacf24)) +- fixed package bundling ([11d2627](https://github.com/skyra-project/discord-components/commit/11d2627bad707a1997e286a02b3004035dfdb306)) +- styling of components ([#72](https://github.com/skyra-project/discord-components/issues/72)) ([b440c2f](https://github.com/skyra-project/discord-components/commit/b440c2fd0b3c1411c0e96e68b0c599b1b95dfecd)) + +### Features + +- use whitney font as default font ([d7c9267](https://github.com/skyra-project/discord-components/commit/d7c9267a7680df5a3b8c7dbab5e14f673ada162b)) + +## [2.0.3-alpha.0](https://github.com/skyra-project/discord-components/compare/v2.0.2...v2.0.3-alpha.0) (2021-03-20) + +### Bug Fixes + +- **core:** export options on top level ([d128f13](https://github.com/skyra-project/discord-components/commit/d128f13b69a22f134ef89a5fbdd4ad9db94006d0)) +- **core:** use proper lifecycle for embed ([e17ddb9](https://github.com/skyra-project/discord-components/commit/e17ddb9f413b380cb668a7d6a8554c5df31e05ff)) +- change lifecycle hooks to `componentWillRender` so props are recomputed on re-renders ([e19f9c3](https://github.com/skyra-project/discord-components/commit/e19f9c3345ee6e943b5d19e383bb4268d1cbc516)) +- fixed readmes and such ([bdb8846](https://github.com/skyra-project/discord-components/commit/bdb8846db2ded36567ef624ddddedf95f59e549b)) + +## [2.0.2](https://github.com/skyra-project/discord-components/compare/v2.0.1...v2.0.2) (2020-10-26) + +**Note:** Version bump only for package @skyra/discord-components-core + +## [2.0.1](https://github.com/skyra-project/discord-components/compare/v2.0.0...v2.0.1) (2020-10-07) + +### Bug Fixes + +- **core:** fixed date parsing for discord-embed ([515d243](https://github.com/skyra-project/discord-components/commit/515d243aa53b921dae523fb599bea9da4e419c07)) + +# [2.0.0](https://github.com/skyra-project/discord-components/compare/v1.3.0...v2.0.0) (2020-09-05) + +### Features + +- bumped stencil-core to v2 ([59ef71e](https://github.com/skyra-project/discord-components/commit/59ef71e48ac786edb35b7c52523206104796a9f0)), closes [/github.com/ionic-team/stencil/blob/master/CHANGELOG.md#-200-2020-08-31](https://github.com//github.com/ionic-team/stencil/blob/master/CHANGELOG.md/issues/-200-2020-08-31) [#12](https://github.com/skyra-project/discord-components/issues/12) + +### BREAKING CHANGES + +- IE11, Edge 16-18, Safari 10 and ES5 builds and support for them is fully removed + now. Also some files are exported under different names in core. For a full list see + +# [1.3.0](https://github.com/skyra-project/discord-components/compare/v1.2.2...v1.3.0) (2020-07-26) + +### Features + +- rename master branch to main ([0bc3666](https://github.com/skyra-project/discord-components/commit/0bc36663a83ab55df4ebb96fc9c69d6809008934)) + +## [1.2.2](https://github.com/skyra-project/discord-components/compare/v1.2.1...v1.2.2) (2020-07-13) + +### Bug Fixes + +- **core:** fixed layout of messages ([5def145](https://github.com/skyra-project/discord-components/commit/5def1450c0baae16eedd17fdec5e63f93b16f0f3)) + +## [1.2.1](https://github.com/skyra-project/discord-components/compare/v1.2.0...v1.2.1) (2020-07-08) + +### Bug Fixes + +- **attachments:** remove width/height modifier size ([4aea4bd](https://github.com/skyra-project/discord-components/commit/4aea4bdbb8aca01fae90a3a1f8aa5caa50df3ae6)) + +# [1.2.0](https://github.com/skyra-project/discord-components/compare/v1.1.4...v1.2.0) (2020-07-07) + +### Bug Fixes + +- update highlighted mention styling ([98e4827](https://github.com/skyra-project/discord-components/commit/98e4827f9829b6d0b8d30a78337a40e3d44c9fb5)) +- **embed-field:** set title to white to match Discord revert ([2e6007f](https://github.com/skyra-project/discord-components/commit/2e6007fb724edf389a63a534936d1ed528d1fd6c)) + +### Features + +- **core:** add discord-attachment component ([adef9b1](https://github.com/skyra-project/discord-components/commit/adef9b121c0ba7061374cbe389560706aa07c76a)) + +## [1.1.4](https://github.com/skyra-project/discord-components/compare/v1.1.3...v1.1.4) (2020-07-06) + +### Bug Fixes + +- **core:** fixed that lib didn't load when not defining window.\$discordMessage ([64293a6](https://github.com/skyra-project/discord-components/commit/64293a6f63ccf3c78f3c8086a0d13d8335d784e1)) + +## [1.1.3](https://github.com/skyra-project/discord-components/compare/v1.1.2...v1.1.3) (2020-07-06) + +### Bug Fixes + +- fixed the unpkg/jsdelivr builds ([d863049](https://github.com/skyra-project/discord-components/commit/d86304962a384f5e7a792fb67db826a389ba6aa5)) + +## [1.1.2](https://github.com/skyra-project/discord-components/compare/v1.1.1...v1.1.2) (2020-06-27) + +### Bug Fixes + +- bump package, regenerate react output ([07af3cc](https://github.com/skyra-project/discord-components/commit/07af3cc4e3ab3df728c4ed91341af2e7a5db3239)) + +## [1.1.1](https://github.com/skyra-project/discord-components/compare/v1.1.0...v1.1.1) (2020-06-06) + +### Bug Fixes + +- bump packages, fixing some stenciljs bugs ([2ac34a9](https://github.com/skyra-project/discord-components/commit/2ac34a9abca911e1abffc9671cb75cb24357335a)) + +# [1.1.0](https://github.com/skyra-project/discord-components/compare/v1.0.1...v1.1.0) (2020-05-19) + +### Bug Fixes + +- **core:** fixed parsing of global profile ([8b31278](https://github.com/skyra-project/discord-components/commit/8b3127857e4bdd0a835e27bd1412f9cbb619b31f)) + +### Features + +- **core:** allow 3-aside inline embed fields ([ec05f33](https://github.com/skyra-project/discord-components/commit/ec05f3372b8c7b590bf0c2d3526f53b3bd2aec98)), closes [#3](https://github.com/skyra-project/discord-components/issues/3) +- **embed:** embedding videos ([1678248](https://github.com/skyra-project/discord-components/commit/1678248ffe7413bb6e66437f03fed0d15b135e4e)), closes [#1](https://github.com/skyra-project/discord-components/issues/1) +- **embed:** provider option ([bf23e66](https://github.com/skyra-project/discord-components/commit/bf23e666555035b80625bccd00f49dfd622f80f9)), closes [#2](https://github.com/skyra-project/discord-components/issues/2) + +## [1.0.1](https://github.com/skyra-project/discord-components/compare/v1.0.0...v1.0.1) (2020-05-10) + +### Bug Fixes + +- **mention:** fixed discord mentions rendering type ([d94a092](https://github.com/skyra-project/discord-components/commit/d94a092f2e9b4c2cd6b4362e14105f7dfb54b6d9)) +- **message:** add hover background to match Discord ([d2c8f32](https://github.com/skyra-project/discord-components/commit/d2c8f32d5f73eb9d65ac091427628d6c705af6b2)) + +# [1.0.0](https://github.com/skyra-project/discord-components/compare/v1.0.0-alpha.1...v1.0.0) (2020-05-10) + +**Note:** Version bump only for package @skyra/discord-components-core + +# [1.0.0-alpha.1](https://github.com/skyra-project/discord-components/compare/v1.0.0-alpha.0...v1.0.0-alpha.1) (2020-05-10) + +**Note:** Version bump only for package @skyra/discord-components-core + +# 1.0.0-alpha.0 (2020-05-10) + +### Features + +- create packages ([1ad5856](https://github.com/skyra-project/discord-components/commit/1ad58560916d3988e8dffc58ad97a52828ff5d35)) diff --git a/packages/discord-components-core/README.md b/packages/discord-components-core/README.md new file mode 100644 index 0000000..95899bb --- /dev/null +++ b/packages/discord-components-core/README.md @@ -0,0 +1,430 @@ +# `@derockdev/discord-components-core` +A fork of [@skyra/discord-components-core](https://github.com/skyra-project/discord-components) designed for use in [discord-html-transcripts](https://github.com/itzderock/discord-html-transcripts) + +## Changes +- Adds `` +- Adds `` +- Adds better support in `` + - Automatically updating based on timestamp and format option +- Adds better support in `` + - Adds support for generic attachments, videos, and audio + +## Original README: + +
+ +**Web components to easily build and display fake Discord messages on your webpages** + +[![License](https://img.shields.io/github/license/skyra-project/discord-components?logo=github&maxAge=3600&style=flat-square)](https://github.com/skyra-project/discord-components/blob/main/LICENSE.md) +[![Patreon](https://img.shields.io/badge/donate-patreon-F96854.svg?logo=patreon)](https://donate.skyra.pw/patreon) + +[![npm](https://img.shields.io/npm/v/@skyra/discord-components-core?color=crimson&logo=npm&style=flat-square&label=@skyra/discord-components-core)](https://www.npmjs.com/package/@skyra/discord-components-core) +[![npm](https://img.shields.io/npm/dt/@skyra/discord-components-core.svg?maxAge=3600&logo=npm)](https://www.npmjs.com/package/@skyra/discord-components-core) +[![npm](https://img.shields.io/bundlephobia/min/@skyra/discord-components-core?label=minified&logo=webpack&maxAge=3600)](https://bundlephobia.com/result?p=@skyra/discord-components-core) +[![Stencil](https://img.shields.io/badge/-Built%20With%20Stencil-16161d.svg?logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTIgNTEyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI%2BCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI%2BCgkuc3Qwe2ZpbGw6I0ZGRkZGRjt9Cjwvc3R5bGU%2BCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik00MjQuNywzNzMuOWMwLDM3LjYtNTUuMSw2OC42LTkyLjcsNjguNkgxODAuNGMtMzcuOSwwLTkyLjctMzAuNy05Mi43LTY4LjZ2LTMuNmgzMzYuOVYzNzMuOXoiLz4KPHBhdGggY2xhc3M9InN0MCIgZD0iTTQyNC43LDI5Mi4xSDE4MC40Yy0zNy42LDAtOTIuNy0zMS05Mi43LTY4LjZ2LTMuNkgzMzJjMzcuNiwwLDkyLjcsMzEsOTIuNyw2OC42VjI5Mi4xeiIvPgo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNNDI0LjcsMTQxLjdIODcuN3YtMy42YzAtMzcuNiw1NC44LTY4LjYsOTIuNy02OC42SDMzMmMzNy45LDAsOTIuNywzMC43LDkyLjcsNjguNlYxNDEuN3oiLz4KPC9zdmc%2BCg%3D%3D&colorA=16161d)](https://stenciljs.com) + +[![Support Server](https://discord.com/api/guilds/254360814063058944/embed.png?style=banner2)](https://join.skyra.pw) + +
+ +--- + +**_Table of Contents_** + +- [@skyra/discord-components-core](#skyradiscord-components-core) + - [Description](#description) + - [Features](#features) + - [Installation](#installation) + - [Usage](#usage) + - [Framework Integration](#framework-integration) + - [Angular](#angular) + - [Live Demo](#live-demo) + - [Sample code](#sample-code) + - [Including the Custom Element Schema](#including-the-custom-element-schema) + - [Calling defineCustomElements](#calling-definecustomelements) + - [Edge (Chakra Core) and IE11 polyfills](#edge-chakra-core-and-ie11-polyfills) + - [React](#react) + - [Live Demo (Create React App)](#live-demo-create-react-app) + - [Live Demo (NextJS)](#live-demo-nextjs) + - [Sample code](#sample-code-1) + - [Vue](#vue) + - [Live Demo](#live-demo-1) + - [Sample code](#sample-code-2) + - [No Framework](#no-framework) + - [Live Demo](#live-demo-2) + - [Sample Code](#sample-code) + - [Notes](#notes) + - [TypeScript module augments](#typescript-module-augments) + - [Avatar shortcuts](#avatar-shortcuts) + - [Profile shortcuts](#profile-shortcuts) + - [Theming](#theming) + - [Components notes](#components-notes) + - [discord-messages component](#discord-messages-component) + - [discord-mention component](#discord-mention-component) + - [DiscordEmbed component](#discordembed-component) + - [EmbedFields component](#embedfields-component) + - [EmbedField component](#embedfield-component) + - [Screenshots](#screenshots) + - [Dark Mode](#dark-mode) + - [Light Mode](#light-mode) + - [Contributors](#contributors) + +## Description + +Discord message components to easily build and display fake Discord messages on your webpage. + +**This is an adaptation of [wc-discord-message] from [Danktuary]** + +## Features + +- Design modelled after [Discord](https://discord.com/) itself +- Comfy and compact mode support +- Dark and light themes support +- Set the message author's username, avatar (use defaults or provide your own), role color, and "bot" tag status +- Display fake user, role, and channel mentions +- Complete embed support +- Simple syntax! + +## Installation + +```bash +yarn add @skyra/discord-components-core @skyra/discord-components-react +# or npm install @skyra/discord-components-core @skyra/discord-components-react +``` + +## Usage + +The syntax is kept fairly simple. Here's a basic example of a regular conversation: + +```html + + Hey guys, I'm new here! Glad to be able to join you all! + Hi, I'm new here too! + + Hey, User and Dawn. Welcome to our server! + + +``` + +## Framework Integration + +### Angular + +### Live Demo + +[![Edit Button](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/discord-components-angular-0xz0z) + +### Sample code + +#### Including the Custom Element Schema + +Including the `CUSTOM_ELEMENTS_SCHEMA` in the module allows the use of the web components in the HTML markup without the compiler producing errors. This code should be added into the `AppModule` and in every other modules that use your custom elements. Here is an example of adding it to `AppModule`: + +```ts +import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { AppComponent } from './app.component'; + +@NgModule({ + declarations: [AppComponent], + imports: [BrowserModule], + providers: [], + bootstrap: [AppComponent], + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class AppModule {} +``` + +The `CUSTOM_ELEMENTS_SCHEMA` needs to be included in any module that uses custom elements. + +#### Calling defineCustomElements + +A component collection built with Stencil includes a main function that is used to load the components in the collection. That function is called `defineCustomElements()` and it needs to be called once during the bootstrapping of your application. One convenient place to do this is in `main.ts` as such: + +```ts +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { defineCustomElements } from '@skyra/discord-components-core/loader'; +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic() + .bootstrapModule(AppModule) + .catch((err) => console.error(err)); + +// Loading @skyra/discord-components-core +defineCustomElements(); +``` + +##### Edge (Chakra Core) and IE11 polyfills + +If you want your custom elements to be able to work on older browsers, you should add the `applyPolyfills()` that surround the `defineCustomElements()` function. + +```ts +import { applyPolyfills, defineCustomElements } from '@skyra/discord-components-core/loader'; + +applyPolyfills().then(() => { + defineCustomElements(); +}); +``` + +### React + +#### Live Demo (Create React App) + +[![Edit Button](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/discord-components-create-react-app-64k90) + +#### Live Demo (NextJS) + +[![Edit Button](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/discord-components-nextjs-ovqfu) + +#### Sample code + +See [@skyra/discord-components-react](https://github.com/skyra-project/discord-components/tree/main/packages/react) + +### Vue + +#### Live Demo + +[![Edit Button](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/discord-components-vue-g1w48) + +#### Sample code + +In order to use the custom element library within the Vue app, the application must be modified to define the custom elements and to inform the Vue compiler which elements to ignore during compilation. This can all be done within the `main.js` file. For example: + +```tsx +import Vue from 'vue'; +import App from './App.vue'; +import { applyPolyfills, defineCustomElements } from '@skyra/discord-components-core/loader'; + +Vue.config.productionTip = false; +// Tell Vue to ignore all components defined in the @skyra/discord-components-core package. +Vue.config.ignoredElements = [/discord-\w*/]; + +// Bind the custom elements to the window object +applyPolyfills().then(() => { + defineCustomElements(); +}); + +new Vue({ + render: (h) => h(App) +}).$mount('#app'); +``` + +The components should then be available in any of the Vue templates + +```html + + + +``` + +### No Framework + +#### Live Demo + +[![Edit Button](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/discord-components-static-nhwkl) + +#### Sample Code + +If you're want to use the browser build, you can pull it in via unpkg. + +```html + +``` + +## Notes + +### TypeScript module augments + +This module uses a custom object on the browser `window` for configuration. In order to this you will need to include the following snippet in your source code when working in TypeScript: + +```ts +import type { DiscordMessageOptions } from '@skyra/discord-components-core/dist/types/options'; + +declare global { + interface Window { + $discordMessage: DiscordMessageOptions; + } +} +``` + +### Avatar shortcuts + +The current avatar shortcut strings available are "blue" (default), "gray", "green", "orange", and "red". These shortcuts map to the following image links: + +```json +{ + "blue": "https://cdn.discordapp.com/attachments/654503812593090602/665721745466195978/blue.png", + "gray": "https://cdn.discordapp.com/attachments/654503812593090602/665721746569166849/gray.png", + "green": "https://cdn.discordapp.com/attachments/654503812593090602/665721748431306753/green.png", + "orange": "https://cdn.discordapp.com/attachments/654503812593090602/665721750201434138/orange.png", + "red": "https://cdn.discordapp.com/attachments/654503812593090602/665721752277483540/red.png" +} +``` + +If you want to add to or override the shortcuts, you can set them via `window.$discordMessage.avatars`. + +```ts +window.$discordMessage = { + avatars: { + default: 'blue', + skyra: 'https://github.com/NM-EEA-Y.png', + djs: require('./assets/discord-avatar-djs.png') // You can use require syntax as well + } +}; +``` + +### Profile shortcuts + +Sometimes you'll want to use the same message data across multiple messages. You can do so by providing an object of profiles in `window.$discordMessage.profiles`. + +```ts +window.$discordMessage = { + profiles: { + skyra: { + author: 'Skyra', + avatar: 'https://github.com/NM-EEA-Y.png', + bot: true, + verified: true, + roleColor: '#1e88e5' + }, + favna: { + author: 'Favna', + avatar: 'https://github.com/favna.png', + roleColor: '#ff0000' + } + } +}; +``` + +And then in your React code: + +```tsx + + + Welcome to our server, Favna! + + Hey, glad to be here! + +``` + +### Theming + +Each of the components accepts the standard HTML properties for passing styling, such as `className` for passing CSS classes (JSS / CSS / SCSS etc.) or `style` to pass inline style. + +You can also pass your own custom HTML tags, for example set a `data-qa` to be able to navigate to the component in your unit tests / end-to-end tests + +### Components notes + +Below are notes for a few certain components. If you want to see what props each component has, check their readme.md file in [the respective folder]. + +#### discord-messages component + +This is a wrapper for any child `` component. It must be used in order for messages to display properly. + +#### discord-mention component + +If the default slot is left empty, the mention will be rendered as `'User'`, `'Role'`, or `'channel`', depending on the `type` prop given. + +#### DiscordEmbed component + +An embed that can be attached to the end of your messages. The default slot is used for the embed's description. The `footer` slot is used for the footer text. + +To ensure the embed gets displayed correctly inside your message, be sure to give it the proper `slot` attribute. + +```html + + Hi, I'm part of the normal message content. + Hi, I'm part of the embed message content. + +``` + +#### EmbedFields component + +A wrapper for any child `` components. Must be used in order for fields to display properly. To ensure the embed fields gets displayed correctly inside your embed, be sure to give it the proper `slot` attribute. + +```html + + + Hi, I'm part of the embed message content. + + + + + +``` + +#### EmbedField component + +At least 2 consecutive fields need to be marked as inline in order for them to actually display next to each other. The maximum amount of inline fields is 3, and drops to 2 if an embed thumbnail is used. + +```html + + + Hi, I'm part of the embed message content. + + Field content. + Field content. + + + +``` + +## Screenshots + +### Dark Mode + +**_A normal conversation_** + +![](https://raw.githubusercontent.com/skyra-project/discord-components/main/assets/dark_mode/normal_conversation.png) + +**_Compact mode_** + +![](https://raw.githubusercontent.com/skyra-project/discord-components/main/assets/dark_mode/compact_mode.png) + +**_With an embed_** + +![](https://raw.githubusercontent.com/skyra-project/discord-components/main/assets/dark_mode/with_embed.png) + +### Light Mode + +**_A normal conversation_** + +![](https://raw.githubusercontent.com/skyra-project/discord-components/main/assets/light_mode/normal_conversation.png) + +**_Compact mode_** + +![](https://raw.githubusercontent.com/skyra-project/discord-components/main/assets/light_mode/compact_mode.png) + +**_With an embed_** + +![](https://raw.githubusercontent.com/skyra-project/discord-components/main/assets/light_mode/with_embed.png) + +## Contributors + +Please make sure to read the [Contributing Guide][contributing] before making a pull request. + +Thank you to all the people who already contributed to Skyra Project! + + + + + +[contributing]: https://github.com/skyra-project/.github/blob/main/.github/CONTRIBUTING.md +[wc-discord-message]: https://github.com/Danktuary/wc-discord-message +[danktuary]: https://github.com/Danktuary +[@stencil/react-output-target]: https://www.npmjs.com/package/@stencil/react-output-target +[the respective folder]: (https://github.com/skyra-project/discord-components/blob/main/packages/core/src/components/) diff --git a/packages/discord-components-core/package.json b/packages/discord-components-core/package.json new file mode 100644 index 0000000..6d6e99d --- /dev/null +++ b/packages/discord-components-core/package.json @@ -0,0 +1,87 @@ +{ + "name": "@derockdev/discord-components-core", + "version": "3.5.2", + "description": "Web components to easily build and display fake Discord messages on your webpages.", + "author": "@derock", + "license": "MIT", + "main": "dist/index.cjs.js", + "module": "dist/index.js", + "es2015": "dist/esm/index.js", + "es2017": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "unpkg": "dist/derockdev-discord-components-core/derockdev-discord-components-core.esm.js", + "collection:main": "dist/collection/index.js", + "collection": "dist/collection/collection-manifest.json", + "exports": { + ".": [ + { + "require": "./dist/index.cjs.js", + "import": "./dist/index.js" + }, + "./dist/index.cjs.js" + ], + "./loader": [ + { + "require": "./loader/index.cjs.js", + "import": "./loader/index.js" + }, + "./loader/index.cjs.js" + ] + }, + "sideEffects": [ + "./loader/index.js", + "./loader/index.cjs.js", + "./dist/derockdev-discord-components-core/p-*", + "**/*derockdev-discord-components-core*.js", + "./dist/esm/loader.js", + "./dist/esm/polyfills/*" + ], + "homepage": "https://github.com/itzderock/discord-components/tree/main/packages/core#readme", + "scripts": { + "build": "stencil build --docs && replace-in-file --configFile=scripts/replaceImportInPolyfills.cjs", + "start": "stencil build --dev --watch --serve", + "generate": "stencil generate" + }, + "dependencies": { + "@stencil/core": "^2.22.1", + "clsx": "^1.2.1", + "hex-to-rgba": "^2.0.1", + "highlight.js": "^11.6.0" + }, + "directories": { + "lib": "src" + }, + "files": [ + "dist/", + "loader/" + ], + "engines": { + "node": ">=v14.0.0" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/itzderock/discord-components.git" + }, + "bugs": { + "url": "https://github.com/itzderock/discord-components/issues" + }, + "keywords": [ + "skyra", + "typescript", + "ts", + "yarn", + "discord", + "bot", + "components", + "webcomponents", + "stencil" + ], + "devDependencies": { + "@sapphire/ts-config": "^3.3.4", + "replace-in-file": "^6.3.5", + "tslib": "^2.4.0" + } +} diff --git a/packages/discord-components-core/pnpm-lock.yaml b/packages/discord-components-core/pnpm-lock.yaml new file mode 100644 index 0000000..cc8cadd --- /dev/null +++ b/packages/discord-components-core/pnpm-lock.yaml @@ -0,0 +1,256 @@ +lockfileVersion: 5.4 + +specifiers: + '@sapphire/ts-config': ^3.3.4 + '@stencil/core': ^2.18.0 + clsx: ^1.2.1 + hex-to-rgba: ^2.0.1 + highlight.js: ^11.6.0 + replace-in-file: ^6.3.5 + tslib: ^2.4.0 + +dependencies: + '@stencil/core': 2.18.0 + clsx: 1.2.1 + hex-to-rgba: 2.0.1 + highlight.js: 11.6.0 + +devDependencies: + '@sapphire/ts-config': 3.3.4 + replace-in-file: 6.3.5 + tslib: 2.4.0 + +packages: + + /@sapphire/ts-config/3.3.4: + resolution: {integrity: sha512-mWEUxCXh3cHKI7C8HJ049exVTMNaq+A/lJEDfM5ENSQ/OOZHd5DdmXn2jrYqFWbTRCHa0Vp2FAmACWBwePsBtg==} + engines: {node: '>=v16.0.0', npm: '>=8.0.0'} + dependencies: + tslib: 2.4.0 + typescript: 4.8.3 + dev: true + + /@stencil/core/2.18.0: + resolution: {integrity: sha512-NLEY8Jq59smyiivBAxHKipsp9YkkW/K/Vm90zAyXQqukb12i2SFucWHJ1Ik7ropVlhmMVvigyxXgRfQ9quIqtg==} + engines: {node: '>=12.10.0', npm: '>=6.0.0'} + hasBin: true + dev: false + + /ansi-regex/5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-styles/4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /chalk/4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /cliui/7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /clsx/1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} + engines: {node: '>=6'} + dev: false + + /color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /concat-map/0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + dev: true + + /emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /fs.realpath/1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /get-caller-file/2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /glob/7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /hex-to-rgba/2.0.1: + resolution: {integrity: sha512-5XqPJBpsEUMsseJUi2w2Hl7cHFFi3+OO10M2pzAvKB1zL6fc+koGMhmBqoDOCB4GemiRM/zvDMRIhVw6EkB8dQ==} + dev: false + + /highlight.js/11.6.0: + resolution: {integrity: sha512-ig1eqDzJaB0pqEvlPVIpSSyMaO92bH1N2rJpLMN/nX396wTpDA4Eq0uK+7I/2XG17pFaaKE0kjV/XPeGt7Evjw==} + engines: {node: '>=12.0.0'} + dev: false + + /inflight/1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /minimatch/3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /once/1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /path-is-absolute/1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /replace-in-file/6.3.5: + resolution: {integrity: sha512-arB9d3ENdKva2fxRnSjwBEXfK1npgyci7ZZuwysgAp7ORjHSyxz6oqIjTEv8R0Ydl4Ll7uOAZXL4vbkhGIizCg==} + engines: {node: '>=10'} + hasBin: true + dependencies: + chalk: 4.1.2 + glob: 7.2.3 + yargs: 17.5.1 + dev: true + + /require-directory/2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + + /string-width/4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /strip-ansi/6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /tslib/2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + dev: true + + /typescript/4.8.3: + resolution: {integrity: sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /wrap-ansi/7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrappy/1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /y18n/5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yargs-parser/21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + + /yargs/17.5.1: + resolution: {integrity: sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==} + engines: {node: '>=12'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: true diff --git a/packages/discord-components-core/scripts/replaceImportInPolyfills.cjs b/packages/discord-components-core/scripts/replaceImportInPolyfills.cjs new file mode 100644 index 0000000..592096f --- /dev/null +++ b/packages/discord-components-core/scripts/replaceImportInPolyfills.cjs @@ -0,0 +1,14 @@ +// eslint-disable-next-line @typescript-eslint/unbound-method, @typescript-eslint/no-var-requires +const { resolve } = require('path'); + +module.exports = { + from: /import\(/g, + to: 'import(\n/* @vite-ignore */\n', + files: [ + resolve(__dirname, '../dist/esm/index*.js'), + resolve(__dirname, '../dist/esm/polyfills/index.js'), + resolve(__dirname, '../dist/esm/polyfills/system.js'), + resolve(__dirname, '../dist/derockdev-discord-components-core/p*.js') + ], + quiet: true +}; diff --git a/packages/discord-components-core/src/Fragment.tsx b/packages/discord-components-core/src/Fragment.tsx new file mode 100644 index 0000000..3824b96 --- /dev/null +++ b/packages/discord-components-core/src/Fragment.tsx @@ -0,0 +1,5 @@ +import type { VNode } from '@stencil/core'; + +export default function Fragment(_props: T, children: VNode[]) { + return [...children]; +} diff --git a/packages/discord-components-core/src/components.d.ts b/packages/discord-components-core/src/components.d.ts new file mode 100644 index 0000000..a6377f6 --- /dev/null +++ b/packages/discord-components-core/src/components.d.ts @@ -0,0 +1,1324 @@ +/* eslint-disable */ +/* tslint:disable */ +/** + * This is an autogenerated file created by the Stencil compiler. + * It contains typing information for all components that exist in this project. + */ +import { HTMLStencilElement, JSXBase } from "@stencil/core/internal"; +import { DiscordTimestamp } from "./util"; +export namespace Components { + interface DiscordActionRow { + } + interface DiscordAttachment { + /** + * The alt text to show in case the image was unable to load + * @default 'discord attachment' + */ + "alt"?: string | undefined; + /** + * The height of the image in pixels + */ + "height"?: number; + /** + * The size of the file. + */ + "size": string; + /** + * The type of file the attachment is. 'image' | 'video' | 'audio' | 'file' + */ + "type": 'image' | 'video' | 'audio' | 'file'; + /** + * The URL for the image attachment + * @important Should be a valid image URL, i.e. matching the regex `/\.(bmp|jpe?g|png|gif|webp|tiff)$/i` + */ + "url": string; + /** + * The width of the image in pixels + */ + "width"?: number; + } + interface DiscordAttachments { + } + interface DiscordBold { + } + interface DiscordButton { + /** + * Whether to show the button as disabled. + */ + "disabled": boolean; + /** + * The emoji URL to use in the button. + */ + "emoji": string; + /** + * The name of the emoji used in the button. + */ + "emojiName": string; + /** + * The type of button this is, this will change the color of the button. Valid values: `primary`, `secondary`, `success`, `destructive`. + */ + "type": 'primary' | 'secondary' | 'success' | 'destructive'; + /** + * The URL for the button. Setting this will force the button type to be `secondary`. + */ + "url": string; + } + interface DiscordCodeBlock { + /** + * The code to display. + */ + "code": string; + /** + * The language of the code block. + */ + "language"?: string; + } + interface DiscordCommand { + /** + * The message author's username. + * @default 'User' + */ + "author": string; + /** + * The message author's avatar. Can be an avatar shortcut, relative path, or external link. + */ + "avatar": string; + /** + * The name of the command invoked. + */ + "command": string; + /** + * The id of the profile data to use. + */ + "profile": string; + /** + * The message author's primary role color. Can be any [CSS color value](https://www.w3schools.com/cssref/css_colors_legal.asp). + */ + "roleColor": string; + } + interface DiscordCustomEmoji { + /** + * Determines whether or not the emoji is used in an embed, or a message. If it is used in an embed, the sizing is adjusted accordingly. + */ + "embedEmoji": boolean; + /** + * The emoji size + */ + "largeEmoji": boolean; + /** + * The name of the emoji + */ + "name": string; + /** + * The emoji URL to use in the message. + */ + "url": string; + } + interface DiscordEmbed { + /** + * The author's avatar URL. + */ + "authorImage": string; + /** + * The author's name. + */ + "authorName": string; + /** + * The URL to open when you click on the author's name. + */ + "authorUrl": string; + /** + * The color to use for the embed's left border. Can be any [CSS color value](https://www.w3schools.com/cssref/css_colors_legal.asp). + */ + "color": string; + /** + * The embed title. + */ + "embedTitle": string; + /** + * The embed image to use (displayed at the bottom). + */ + "image": string; + /** + * The provider to show above the embed, for example for YouTube videos it will show "YouTube" at the top of the embed (above the author) + * @example YouTube + */ + "provider": string; + /** + * The thumbnail image to use. + */ + "thumbnail": string; + /** + * The URL to open when you click on the embed title. + */ + "url": string; + /** + * The embed video to use (displayed at the bottom, same slot as the image). + * @important YouTube videos will not be playable on your projects, this is due to YouTube using DASH to play their videos rather than providing the raw media stream (in a container such as mp4 or ogg). Links to regular MP4 files (such as on a CDN) however will autoplay! + * @note Video takes priority over image. + * @remark Providing both a video and an image will ensure the image is shown to users with browsers that do not support HTML5 video playback. + * @example https://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_1080p_stereo.ogg + */ + "video": string; + } + interface DiscordEmbedDescription { + } + interface DiscordEmbedField { + /** + * The field's title. + */ + "fieldTitle": string; + /** + * Whether this field should be displayed inline or not. + */ + "inline": boolean; + /** + * The index of this inline field + * @remark This defines the position of this inline field. 1 is left, 2 is middle and 3 is right. + * @oneof [1, 2, 3] + * @default 1 + */ + "inlineIndex": number; + } + interface DiscordEmbedFields { + } + interface DiscordEmbedFooter { + /** + * The image to use next to the footer text. + */ + "footerImage": string; + /** + * The timestamp to use for the message date. When supplying a string, the format must be `01/31/2000`. + */ + "timestamp"?: DiscordTimestamp; + } + interface DiscordHeader { + /** + * The name of the channel + */ + "channel": string; + /** + * The guild name + */ + "guild": string; + /** + * The icon to display. + */ + "icon"?: string; + } + interface DiscordInlineCode { + } + interface DiscordInvite { + /** + * The server icon to display for the invite. + */ + "icon": string | undefined; + /** + * Invitation embed title. + * @default "You've been invited to join a server" + */ + "inviteTitle": string; + /** + * The join button. + * @default 'Join' + */ + "joinBtn": string; + /** + * The number of members on the server. + * @default 0 + */ + "members": number; + /** + * The server's name. + * @default 'Discord Server' + */ + "name": string; + /** + * The number of members online on the server. + * @default 0 + */ + "online": number; + /** + * Whether the server is partnered. Only works if `verified` is `false` or `undefined`. + */ + "partnered": boolean; + /** + * The URL to open when you click on the join button. + */ + "url": string; + /** + * Whether the server is verified. Only works if `partnered` is `false` or `undefined`. + */ + "verified": boolean; + } + interface DiscordItalic { + } + interface DiscordMention { + /** + * The color to use for this mention. Only works for role mentions and must be in hex format. + */ + "color": string; + /** + * Whether this entire message block should be highlighted (to emulate the "logged in user" being pinged). + */ + "highlight": boolean; + /** + * The type of mention this should be. This will prepend the proper prefix character. Valid values: `user`, `channel`, `role`, `voice`, `locked`, `thread`, `forum`, and `slash`. + */ + "type": 'user' | 'channel' | 'role' | 'voice' | 'locked' | 'thread' | 'forum' | 'slash'; + } + interface DiscordMessage { + /** + * The message author's username. + * @default 'User' + */ + "author": string; + /** + * The message author's avatar. Can be an avatar shortcut, relative path, or external link. + */ + "avatar": string; + /** + * Whether the message author is a bot or not. Only works if `server` is `false` or `undefined`. + */ + "bot": boolean; + /** + * Whether the message has been edited or not. + */ + "edited": boolean; + /** + * Whether to make this message ephemeral. + */ + "ephemeral": boolean; + /** + * Whether to highlight this message. + */ + "highlight": boolean; + /** + * Whether the author is the original poster. + */ + "op": boolean; + /** + * The id of the profile data to use. + */ + "profile": string; + /** + * The message author's primary role color. Can be any [CSS color value](https://www.w3schools.com/cssref/css_colors_legal.asp). + */ + "roleColor": string; + /** + * The message author's role icon URL. + */ + "roleIcon": string; + /** + * The name of the role to use as alternative image text. + */ + "roleName": string; + /** + * Whether the message author is a server crosspost webhook or not. Only works if `bot` is `false` or `undefined`. + */ + "server": boolean; + /** + * The timestamp to use for the message date. + */ + "timestamp": DiscordTimestamp; + /** + * Whether to use 24-hour format for the timestamp. + */ + "twentyFour": boolean; + /** + * Whether the bot is verified or not. Only works if `bot` is `true` + */ + "verified": boolean; + } + interface DiscordMessages { + /** + * Whether to use compact mode or not. + */ + "compactMode": boolean; + /** + * Whether to use light theme or not. + */ + "lightTheme": boolean; + /** + * Whether to exclude the background or not. + */ + "noBackground": boolean; + } + interface DiscordQuote { + } + interface DiscordReaction { + /** + * The number of people who reacted. + * @default 1 + */ + "count": number; + /** + * The reaction emoji image URL. + */ + "emoji": string; + /** + * Whether the reaction should be reactive. + * @remark When the reaction is interactive left clicking it will add 1 to the counter. Whereas when holding the Shift key and left clicking it will decrease the counter. The counter cannot go below 1. + * @default false + */ + "interactive": boolean; + /** + * The name of the emoji to use as alternative image text. + * @default ':emoji' + */ + "name": string; + /** + * Whether the reaction should show as reacted by the user. + * @default false + */ + "reacted": boolean; + } + interface DiscordReactions { + } + interface DiscordReply { + /** + * Whether the referenced message contains attachments. + */ + "attachment": boolean; + /** + * The message author's username. + * @default 'User' + */ + "author": string; + /** + * The message author's avatar. Can be an avatar shortcut, relative path, or external link. + */ + "avatar": string; + /** + * Whether the message author is a bot or not. Only works if `server` is `false` or `undefined`. + */ + "bot": boolean; + /** + * Whether the referenced message is from a response of a slash command. + */ + "command": boolean; + /** + * Whether the message has been edited or not. + */ + "edited": boolean; + /** + * Whether this reply pings the original message sender, prepending an "@" on the author's username. + */ + "mentions": boolean; + /** + * Whether the author is the original poster. + */ + "op": boolean; + /** + * The id of the profile data to use. + */ + "profile": string; + /** + * The message author's primary role color. Can be any [CSS color value](https://www.w3schools.com/cssref/css_colors_legal.asp). + */ + "roleColor": string; + /** + * Whether the message author is a server crosspost webhook or not. Only works if `bot` is `false` or `undefined`. + */ + "server": boolean; + /** + * Whether the bot is verified or not. Only works if `bot` is `true` + */ + "verified": boolean; + } + interface DiscordSpoiler { + } + interface DiscordSystemMessage { + /** + * Whether this message is to show channel name changes, used to match Discord's style. + */ + "channelName": boolean; + /** + * The timestamp to use for the message date. + */ + "timestamp": DiscordTimestamp; + /** + * The type of system message this is, this will change the icon shown. Valid values: `join`, `leave`, `call`, `missed-call`, `boost`, `edit`, `thread`, `pin`, `alert`, and `error`. + */ + "type": 'join' | 'leave' | 'call' | 'missed-call' | 'boost' | 'edit' | 'thread' | 'pin' | 'alert' | 'error'; + } + interface DiscordTenorVideo { + /** + * The height of the video in pixels + */ + "height": number; + /** + * The URL for the video + */ + "url": string; + /** + * The width of the video in pixels + */ + "width": number; + } + interface DiscordThread { + /** + * The the text within the call to action text. (i.e. 'See Thread' or 'x Messages') + */ + "cta": string; + /** + * The name of the thread. + */ + "name": string; + } + interface DiscordThreadMessage { + /** + * The message author's username. + * @default 'User' + */ + "author": string; + /** + * The message author's avatar. Can be an avatar shortcut, relative path, or external link. + */ + "avatar": string; + /** + * Whether the message author is a bot or not. Only works if `server` is `false` or `undefined`. + */ + "bot": boolean; + /** + * Whether the message has been edited or not. + */ + "edited": boolean; + /** + * The id of the profile data to use. + */ + "profile": string; + /** + * The relative timestamp of the message. + */ + "relativeTimestamp": string; + /** + * The message author's primary role color. Can be any [CSS color value](https://www.w3schools.com/cssref/css_colors_legal.asp). + */ + "roleColor": string; + /** + * Whether the message author is a server crosspost webhook or not. Only works if `bot` is `false` or `undefined`. + */ + "server": boolean; + /** + * Whether the bot is verified or not. Only works if `bot` is `true` + */ + "verified": boolean; + } + interface DiscordTime { + /** + * The format for the time. + */ + "format": 't' | 'T' | 'f' | 'F' | 'd' | 'D' | 'R'; + /** + * The time to display. + */ + "timestamp": number; + } + interface DiscordUnderlined { + } +} +declare global { + interface HTMLDiscordActionRowElement extends Components.DiscordActionRow, HTMLStencilElement { + } + var HTMLDiscordActionRowElement: { + prototype: HTMLDiscordActionRowElement; + new (): HTMLDiscordActionRowElement; + }; + interface HTMLDiscordAttachmentElement extends Components.DiscordAttachment, HTMLStencilElement { + } + var HTMLDiscordAttachmentElement: { + prototype: HTMLDiscordAttachmentElement; + new (): HTMLDiscordAttachmentElement; + }; + interface HTMLDiscordAttachmentsElement extends Components.DiscordAttachments, HTMLStencilElement { + } + var HTMLDiscordAttachmentsElement: { + prototype: HTMLDiscordAttachmentsElement; + new (): HTMLDiscordAttachmentsElement; + }; + interface HTMLDiscordBoldElement extends Components.DiscordBold, HTMLStencilElement { + } + var HTMLDiscordBoldElement: { + prototype: HTMLDiscordBoldElement; + new (): HTMLDiscordBoldElement; + }; + interface HTMLDiscordButtonElement extends Components.DiscordButton, HTMLStencilElement { + } + var HTMLDiscordButtonElement: { + prototype: HTMLDiscordButtonElement; + new (): HTMLDiscordButtonElement; + }; + interface HTMLDiscordCodeBlockElement extends Components.DiscordCodeBlock, HTMLStencilElement { + } + var HTMLDiscordCodeBlockElement: { + prototype: HTMLDiscordCodeBlockElement; + new (): HTMLDiscordCodeBlockElement; + }; + interface HTMLDiscordCommandElement extends Components.DiscordCommand, HTMLStencilElement { + } + var HTMLDiscordCommandElement: { + prototype: HTMLDiscordCommandElement; + new (): HTMLDiscordCommandElement; + }; + interface HTMLDiscordCustomEmojiElement extends Components.DiscordCustomEmoji, HTMLStencilElement { + } + var HTMLDiscordCustomEmojiElement: { + prototype: HTMLDiscordCustomEmojiElement; + new (): HTMLDiscordCustomEmojiElement; + }; + interface HTMLDiscordEmbedElement extends Components.DiscordEmbed, HTMLStencilElement { + } + var HTMLDiscordEmbedElement: { + prototype: HTMLDiscordEmbedElement; + new (): HTMLDiscordEmbedElement; + }; + interface HTMLDiscordEmbedDescriptionElement extends Components.DiscordEmbedDescription, HTMLStencilElement { + } + var HTMLDiscordEmbedDescriptionElement: { + prototype: HTMLDiscordEmbedDescriptionElement; + new (): HTMLDiscordEmbedDescriptionElement; + }; + interface HTMLDiscordEmbedFieldElement extends Components.DiscordEmbedField, HTMLStencilElement { + } + var HTMLDiscordEmbedFieldElement: { + prototype: HTMLDiscordEmbedFieldElement; + new (): HTMLDiscordEmbedFieldElement; + }; + interface HTMLDiscordEmbedFieldsElement extends Components.DiscordEmbedFields, HTMLStencilElement { + } + var HTMLDiscordEmbedFieldsElement: { + prototype: HTMLDiscordEmbedFieldsElement; + new (): HTMLDiscordEmbedFieldsElement; + }; + interface HTMLDiscordEmbedFooterElement extends Components.DiscordEmbedFooter, HTMLStencilElement { + } + var HTMLDiscordEmbedFooterElement: { + prototype: HTMLDiscordEmbedFooterElement; + new (): HTMLDiscordEmbedFooterElement; + }; + interface HTMLDiscordHeaderElement extends Components.DiscordHeader, HTMLStencilElement { + } + var HTMLDiscordHeaderElement: { + prototype: HTMLDiscordHeaderElement; + new (): HTMLDiscordHeaderElement; + }; + interface HTMLDiscordInlineCodeElement extends Components.DiscordInlineCode, HTMLStencilElement { + } + var HTMLDiscordInlineCodeElement: { + prototype: HTMLDiscordInlineCodeElement; + new (): HTMLDiscordInlineCodeElement; + }; + interface HTMLDiscordInviteElement extends Components.DiscordInvite, HTMLStencilElement { + } + var HTMLDiscordInviteElement: { + prototype: HTMLDiscordInviteElement; + new (): HTMLDiscordInviteElement; + }; + interface HTMLDiscordItalicElement extends Components.DiscordItalic, HTMLStencilElement { + } + var HTMLDiscordItalicElement: { + prototype: HTMLDiscordItalicElement; + new (): HTMLDiscordItalicElement; + }; + interface HTMLDiscordMentionElement extends Components.DiscordMention, HTMLStencilElement { + } + var HTMLDiscordMentionElement: { + prototype: HTMLDiscordMentionElement; + new (): HTMLDiscordMentionElement; + }; + interface HTMLDiscordMessageElement extends Components.DiscordMessage, HTMLStencilElement { + } + var HTMLDiscordMessageElement: { + prototype: HTMLDiscordMessageElement; + new (): HTMLDiscordMessageElement; + }; + interface HTMLDiscordMessagesElement extends Components.DiscordMessages, HTMLStencilElement { + } + var HTMLDiscordMessagesElement: { + prototype: HTMLDiscordMessagesElement; + new (): HTMLDiscordMessagesElement; + }; + interface HTMLDiscordQuoteElement extends Components.DiscordQuote, HTMLStencilElement { + } + var HTMLDiscordQuoteElement: { + prototype: HTMLDiscordQuoteElement; + new (): HTMLDiscordQuoteElement; + }; + interface HTMLDiscordReactionElement extends Components.DiscordReaction, HTMLStencilElement { + } + var HTMLDiscordReactionElement: { + prototype: HTMLDiscordReactionElement; + new (): HTMLDiscordReactionElement; + }; + interface HTMLDiscordReactionsElement extends Components.DiscordReactions, HTMLStencilElement { + } + var HTMLDiscordReactionsElement: { + prototype: HTMLDiscordReactionsElement; + new (): HTMLDiscordReactionsElement; + }; + interface HTMLDiscordReplyElement extends Components.DiscordReply, HTMLStencilElement { + } + var HTMLDiscordReplyElement: { + prototype: HTMLDiscordReplyElement; + new (): HTMLDiscordReplyElement; + }; + interface HTMLDiscordSpoilerElement extends Components.DiscordSpoiler, HTMLStencilElement { + } + var HTMLDiscordSpoilerElement: { + prototype: HTMLDiscordSpoilerElement; + new (): HTMLDiscordSpoilerElement; + }; + interface HTMLDiscordSystemMessageElement extends Components.DiscordSystemMessage, HTMLStencilElement { + } + var HTMLDiscordSystemMessageElement: { + prototype: HTMLDiscordSystemMessageElement; + new (): HTMLDiscordSystemMessageElement; + }; + interface HTMLDiscordTenorVideoElement extends Components.DiscordTenorVideo, HTMLStencilElement { + } + var HTMLDiscordTenorVideoElement: { + prototype: HTMLDiscordTenorVideoElement; + new (): HTMLDiscordTenorVideoElement; + }; + interface HTMLDiscordThreadElement extends Components.DiscordThread, HTMLStencilElement { + } + var HTMLDiscordThreadElement: { + prototype: HTMLDiscordThreadElement; + new (): HTMLDiscordThreadElement; + }; + interface HTMLDiscordThreadMessageElement extends Components.DiscordThreadMessage, HTMLStencilElement { + } + var HTMLDiscordThreadMessageElement: { + prototype: HTMLDiscordThreadMessageElement; + new (): HTMLDiscordThreadMessageElement; + }; + interface HTMLDiscordTimeElement extends Components.DiscordTime, HTMLStencilElement { + } + var HTMLDiscordTimeElement: { + prototype: HTMLDiscordTimeElement; + new (): HTMLDiscordTimeElement; + }; + interface HTMLDiscordUnderlinedElement extends Components.DiscordUnderlined, HTMLStencilElement { + } + var HTMLDiscordUnderlinedElement: { + prototype: HTMLDiscordUnderlinedElement; + new (): HTMLDiscordUnderlinedElement; + }; + interface HTMLElementTagNameMap { + "discord-action-row": HTMLDiscordActionRowElement; + "discord-attachment": HTMLDiscordAttachmentElement; + "discord-attachments": HTMLDiscordAttachmentsElement; + "discord-bold": HTMLDiscordBoldElement; + "discord-button": HTMLDiscordButtonElement; + "discord-code-block": HTMLDiscordCodeBlockElement; + "discord-command": HTMLDiscordCommandElement; + "discord-custom-emoji": HTMLDiscordCustomEmojiElement; + "discord-embed": HTMLDiscordEmbedElement; + "discord-embed-description": HTMLDiscordEmbedDescriptionElement; + "discord-embed-field": HTMLDiscordEmbedFieldElement; + "discord-embed-fields": HTMLDiscordEmbedFieldsElement; + "discord-embed-footer": HTMLDiscordEmbedFooterElement; + "discord-header": HTMLDiscordHeaderElement; + "discord-inline-code": HTMLDiscordInlineCodeElement; + "discord-invite": HTMLDiscordInviteElement; + "discord-italic": HTMLDiscordItalicElement; + "discord-mention": HTMLDiscordMentionElement; + "discord-message": HTMLDiscordMessageElement; + "discord-messages": HTMLDiscordMessagesElement; + "discord-quote": HTMLDiscordQuoteElement; + "discord-reaction": HTMLDiscordReactionElement; + "discord-reactions": HTMLDiscordReactionsElement; + "discord-reply": HTMLDiscordReplyElement; + "discord-spoiler": HTMLDiscordSpoilerElement; + "discord-system-message": HTMLDiscordSystemMessageElement; + "discord-tenor-video": HTMLDiscordTenorVideoElement; + "discord-thread": HTMLDiscordThreadElement; + "discord-thread-message": HTMLDiscordThreadMessageElement; + "discord-time": HTMLDiscordTimeElement; + "discord-underlined": HTMLDiscordUnderlinedElement; + } +} +declare namespace LocalJSX { + interface DiscordActionRow { + } + interface DiscordAttachment { + /** + * The alt text to show in case the image was unable to load + * @default 'discord attachment' + */ + "alt"?: string | undefined; + /** + * The height of the image in pixels + */ + "height"?: number; + /** + * The size of the file. + */ + "size"?: string; + /** + * The type of file the attachment is. 'image' | 'video' | 'audio' | 'file' + */ + "type"?: 'image' | 'video' | 'audio' | 'file'; + /** + * The URL for the image attachment + * @important Should be a valid image URL, i.e. matching the regex `/\.(bmp|jpe?g|png|gif|webp|tiff)$/i` + */ + "url"?: string; + /** + * The width of the image in pixels + */ + "width"?: number; + } + interface DiscordAttachments { + } + interface DiscordBold { + } + interface DiscordButton { + /** + * Whether to show the button as disabled. + */ + "disabled"?: boolean; + /** + * The emoji URL to use in the button. + */ + "emoji"?: string; + /** + * The name of the emoji used in the button. + */ + "emojiName"?: string; + /** + * The type of button this is, this will change the color of the button. Valid values: `primary`, `secondary`, `success`, `destructive`. + */ + "type"?: 'primary' | 'secondary' | 'success' | 'destructive'; + /** + * The URL for the button. Setting this will force the button type to be `secondary`. + */ + "url"?: string; + } + interface DiscordCodeBlock { + /** + * The code to display. + */ + "code"?: string; + /** + * The language of the code block. + */ + "language"?: string; + } + interface DiscordCommand { + /** + * The message author's username. + * @default 'User' + */ + "author"?: string; + /** + * The message author's avatar. Can be an avatar shortcut, relative path, or external link. + */ + "avatar"?: string; + /** + * The name of the command invoked. + */ + "command"?: string; + /** + * The id of the profile data to use. + */ + "profile"?: string; + /** + * The message author's primary role color. Can be any [CSS color value](https://www.w3schools.com/cssref/css_colors_legal.asp). + */ + "roleColor"?: string; + } + interface DiscordCustomEmoji { + /** + * Determines whether or not the emoji is used in an embed, or a message. If it is used in an embed, the sizing is adjusted accordingly. + */ + "embedEmoji"?: boolean; + /** + * The emoji size + */ + "largeEmoji"?: boolean; + /** + * The name of the emoji + */ + "name"?: string; + /** + * The emoji URL to use in the message. + */ + "url"?: string; + } + interface DiscordEmbed { + /** + * The author's avatar URL. + */ + "authorImage"?: string; + /** + * The author's name. + */ + "authorName"?: string; + /** + * The URL to open when you click on the author's name. + */ + "authorUrl"?: string; + /** + * The color to use for the embed's left border. Can be any [CSS color value](https://www.w3schools.com/cssref/css_colors_legal.asp). + */ + "color"?: string; + /** + * The embed title. + */ + "embedTitle"?: string; + /** + * The embed image to use (displayed at the bottom). + */ + "image"?: string; + /** + * The provider to show above the embed, for example for YouTube videos it will show "YouTube" at the top of the embed (above the author) + * @example YouTube + */ + "provider"?: string; + /** + * The thumbnail image to use. + */ + "thumbnail"?: string; + /** + * The URL to open when you click on the embed title. + */ + "url"?: string; + /** + * The embed video to use (displayed at the bottom, same slot as the image). + * @important YouTube videos will not be playable on your projects, this is due to YouTube using DASH to play their videos rather than providing the raw media stream (in a container such as mp4 or ogg). Links to regular MP4 files (such as on a CDN) however will autoplay! + * @note Video takes priority over image. + * @remark Providing both a video and an image will ensure the image is shown to users with browsers that do not support HTML5 video playback. + * @example https://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_1080p_stereo.ogg + */ + "video"?: string; + } + interface DiscordEmbedDescription { + } + interface DiscordEmbedField { + /** + * The field's title. + */ + "fieldTitle": string; + /** + * Whether this field should be displayed inline or not. + */ + "inline"?: boolean; + /** + * The index of this inline field + * @remark This defines the position of this inline field. 1 is left, 2 is middle and 3 is right. + * @oneof [1, 2, 3] + * @default 1 + */ + "inlineIndex"?: number; + } + interface DiscordEmbedFields { + } + interface DiscordEmbedFooter { + /** + * The image to use next to the footer text. + */ + "footerImage"?: string; + /** + * The timestamp to use for the message date. When supplying a string, the format must be `01/31/2000`. + */ + "timestamp"?: DiscordTimestamp; + } + interface DiscordHeader { + /** + * The name of the channel + */ + "channel"?: string; + /** + * The guild name + */ + "guild"?: string; + /** + * The icon to display. + */ + "icon"?: string; + } + interface DiscordInlineCode { + } + interface DiscordInvite { + /** + * The server icon to display for the invite. + */ + "icon"?: string | undefined; + /** + * Invitation embed title. + * @default "You've been invited to join a server" + */ + "inviteTitle"?: string; + /** + * The join button. + * @default 'Join' + */ + "joinBtn"?: string; + /** + * The number of members on the server. + * @default 0 + */ + "members"?: number; + /** + * The server's name. + * @default 'Discord Server' + */ + "name"?: string; + /** + * The number of members online on the server. + * @default 0 + */ + "online"?: number; + /** + * Whether the server is partnered. Only works if `verified` is `false` or `undefined`. + */ + "partnered"?: boolean; + /** + * The URL to open when you click on the join button. + */ + "url"?: string; + /** + * Whether the server is verified. Only works if `partnered` is `false` or `undefined`. + */ + "verified"?: boolean; + } + interface DiscordItalic { + } + interface DiscordMention { + /** + * The color to use for this mention. Only works for role mentions and must be in hex format. + */ + "color"?: string; + /** + * Whether this entire message block should be highlighted (to emulate the "logged in user" being pinged). + */ + "highlight"?: boolean; + /** + * The type of mention this should be. This will prepend the proper prefix character. Valid values: `user`, `channel`, `role`, `voice`, `locked`, `thread`, `forum`, and `slash`. + */ + "type"?: 'user' | 'channel' | 'role' | 'voice' | 'locked' | 'thread' | 'forum' | 'slash'; + } + interface DiscordMessage { + /** + * The message author's username. + * @default 'User' + */ + "author"?: string; + /** + * The message author's avatar. Can be an avatar shortcut, relative path, or external link. + */ + "avatar"?: string; + /** + * Whether the message author is a bot or not. Only works if `server` is `false` or `undefined`. + */ + "bot"?: boolean; + /** + * Whether the message has been edited or not. + */ + "edited"?: boolean; + /** + * Whether to make this message ephemeral. + */ + "ephemeral"?: boolean; + /** + * Whether to highlight this message. + */ + "highlight"?: boolean; + /** + * Whether the author is the original poster. + */ + "op"?: boolean; + /** + * The id of the profile data to use. + */ + "profile"?: string; + /** + * The message author's primary role color. Can be any [CSS color value](https://www.w3schools.com/cssref/css_colors_legal.asp). + */ + "roleColor"?: string; + /** + * The message author's role icon URL. + */ + "roleIcon"?: string; + /** + * The name of the role to use as alternative image text. + */ + "roleName"?: string; + /** + * Whether the message author is a server crosspost webhook or not. Only works if `bot` is `false` or `undefined`. + */ + "server"?: boolean; + /** + * The timestamp to use for the message date. + */ + "timestamp"?: DiscordTimestamp; + /** + * Whether to use 24-hour format for the timestamp. + */ + "twentyFour"?: boolean; + /** + * Whether the bot is verified or not. Only works if `bot` is `true` + */ + "verified"?: boolean; + } + interface DiscordMessages { + /** + * Whether to use compact mode or not. + */ + "compactMode"?: boolean; + /** + * Whether to use light theme or not. + */ + "lightTheme"?: boolean; + /** + * Whether to exclude the background or not. + */ + "noBackground"?: boolean; + } + interface DiscordQuote { + } + interface DiscordReaction { + /** + * The number of people who reacted. + * @default 1 + */ + "count"?: number; + /** + * The reaction emoji image URL. + */ + "emoji"?: string; + /** + * Whether the reaction should be reactive. + * @remark When the reaction is interactive left clicking it will add 1 to the counter. Whereas when holding the Shift key and left clicking it will decrease the counter. The counter cannot go below 1. + * @default false + */ + "interactive"?: boolean; + /** + * The name of the emoji to use as alternative image text. + * @default ':emoji' + */ + "name"?: string; + /** + * Whether the reaction should show as reacted by the user. + * @default false + */ + "reacted"?: boolean; + } + interface DiscordReactions { + } + interface DiscordReply { + /** + * Whether the referenced message contains attachments. + */ + "attachment"?: boolean; + /** + * The message author's username. + * @default 'User' + */ + "author"?: string; + /** + * The message author's avatar. Can be an avatar shortcut, relative path, or external link. + */ + "avatar"?: string; + /** + * Whether the message author is a bot or not. Only works if `server` is `false` or `undefined`. + */ + "bot"?: boolean; + /** + * Whether the referenced message is from a response of a slash command. + */ + "command"?: boolean; + /** + * Whether the message has been edited or not. + */ + "edited"?: boolean; + /** + * Whether this reply pings the original message sender, prepending an "@" on the author's username. + */ + "mentions"?: boolean; + /** + * Whether the author is the original poster. + */ + "op"?: boolean; + /** + * The id of the profile data to use. + */ + "profile"?: string; + /** + * The message author's primary role color. Can be any [CSS color value](https://www.w3schools.com/cssref/css_colors_legal.asp). + */ + "roleColor"?: string; + /** + * Whether the message author is a server crosspost webhook or not. Only works if `bot` is `false` or `undefined`. + */ + "server"?: boolean; + /** + * Whether the bot is verified or not. Only works if `bot` is `true` + */ + "verified"?: boolean; + } + interface DiscordSpoiler { + } + interface DiscordSystemMessage { + /** + * Whether this message is to show channel name changes, used to match Discord's style. + */ + "channelName"?: boolean; + /** + * The timestamp to use for the message date. + */ + "timestamp"?: DiscordTimestamp; + /** + * The type of system message this is, this will change the icon shown. Valid values: `join`, `leave`, `call`, `missed-call`, `boost`, `edit`, `thread`, `pin`, `alert`, and `error`. + */ + "type"?: 'join' | 'leave' | 'call' | 'missed-call' | 'boost' | 'edit' | 'thread' | 'pin' | 'alert' | 'error'; + } + interface DiscordTenorVideo { + /** + * The height of the video in pixels + */ + "height"?: number; + /** + * The URL for the video + */ + "url"?: string; + /** + * The width of the video in pixels + */ + "width"?: number; + } + interface DiscordThread { + /** + * The the text within the call to action text. (i.e. 'See Thread' or 'x Messages') + */ + "cta"?: string; + /** + * The name of the thread. + */ + "name"?: string; + } + interface DiscordThreadMessage { + /** + * The message author's username. + * @default 'User' + */ + "author"?: string; + /** + * The message author's avatar. Can be an avatar shortcut, relative path, or external link. + */ + "avatar"?: string; + /** + * Whether the message author is a bot or not. Only works if `server` is `false` or `undefined`. + */ + "bot"?: boolean; + /** + * Whether the message has been edited or not. + */ + "edited"?: boolean; + /** + * The id of the profile data to use. + */ + "profile"?: string; + /** + * The relative timestamp of the message. + */ + "relativeTimestamp"?: string; + /** + * The message author's primary role color. Can be any [CSS color value](https://www.w3schools.com/cssref/css_colors_legal.asp). + */ + "roleColor"?: string; + /** + * Whether the message author is a server crosspost webhook or not. Only works if `bot` is `false` or `undefined`. + */ + "server"?: boolean; + /** + * Whether the bot is verified or not. Only works if `bot` is `true` + */ + "verified"?: boolean; + } + interface DiscordTime { + /** + * The format for the time. + */ + "format"?: 't' | 'T' | 'f' | 'F' | 'd' | 'D' | 'R'; + /** + * The time to display. + */ + "timestamp"?: number; + } + interface DiscordUnderlined { + } + interface IntrinsicElements { + "discord-action-row": DiscordActionRow; + "discord-attachment": DiscordAttachment; + "discord-attachments": DiscordAttachments; + "discord-bold": DiscordBold; + "discord-button": DiscordButton; + "discord-code-block": DiscordCodeBlock; + "discord-command": DiscordCommand; + "discord-custom-emoji": DiscordCustomEmoji; + "discord-embed": DiscordEmbed; + "discord-embed-description": DiscordEmbedDescription; + "discord-embed-field": DiscordEmbedField; + "discord-embed-fields": DiscordEmbedFields; + "discord-embed-footer": DiscordEmbedFooter; + "discord-header": DiscordHeader; + "discord-inline-code": DiscordInlineCode; + "discord-invite": DiscordInvite; + "discord-italic": DiscordItalic; + "discord-mention": DiscordMention; + "discord-message": DiscordMessage; + "discord-messages": DiscordMessages; + "discord-quote": DiscordQuote; + "discord-reaction": DiscordReaction; + "discord-reactions": DiscordReactions; + "discord-reply": DiscordReply; + "discord-spoiler": DiscordSpoiler; + "discord-system-message": DiscordSystemMessage; + "discord-tenor-video": DiscordTenorVideo; + "discord-thread": DiscordThread; + "discord-thread-message": DiscordThreadMessage; + "discord-time": DiscordTime; + "discord-underlined": DiscordUnderlined; + } +} +export { LocalJSX as JSX }; +declare module "@stencil/core" { + export namespace JSX { + interface IntrinsicElements { + "discord-action-row": LocalJSX.DiscordActionRow & JSXBase.HTMLAttributes; + "discord-attachment": LocalJSX.DiscordAttachment & JSXBase.HTMLAttributes; + "discord-attachments": LocalJSX.DiscordAttachments & JSXBase.HTMLAttributes; + "discord-bold": LocalJSX.DiscordBold & JSXBase.HTMLAttributes; + "discord-button": LocalJSX.DiscordButton & JSXBase.HTMLAttributes; + "discord-code-block": LocalJSX.DiscordCodeBlock & JSXBase.HTMLAttributes; + "discord-command": LocalJSX.DiscordCommand & JSXBase.HTMLAttributes; + "discord-custom-emoji": LocalJSX.DiscordCustomEmoji & JSXBase.HTMLAttributes; + "discord-embed": LocalJSX.DiscordEmbed & JSXBase.HTMLAttributes; + "discord-embed-description": LocalJSX.DiscordEmbedDescription & JSXBase.HTMLAttributes; + "discord-embed-field": LocalJSX.DiscordEmbedField & JSXBase.HTMLAttributes; + "discord-embed-fields": LocalJSX.DiscordEmbedFields & JSXBase.HTMLAttributes; + "discord-embed-footer": LocalJSX.DiscordEmbedFooter & JSXBase.HTMLAttributes; + "discord-header": LocalJSX.DiscordHeader & JSXBase.HTMLAttributes; + "discord-inline-code": LocalJSX.DiscordInlineCode & JSXBase.HTMLAttributes; + "discord-invite": LocalJSX.DiscordInvite & JSXBase.HTMLAttributes; + "discord-italic": LocalJSX.DiscordItalic & JSXBase.HTMLAttributes; + "discord-mention": LocalJSX.DiscordMention & JSXBase.HTMLAttributes; + "discord-message": LocalJSX.DiscordMessage & JSXBase.HTMLAttributes; + "discord-messages": LocalJSX.DiscordMessages & JSXBase.HTMLAttributes; + "discord-quote": LocalJSX.DiscordQuote & JSXBase.HTMLAttributes; + "discord-reaction": LocalJSX.DiscordReaction & JSXBase.HTMLAttributes; + "discord-reactions": LocalJSX.DiscordReactions & JSXBase.HTMLAttributes; + "discord-reply": LocalJSX.DiscordReply & JSXBase.HTMLAttributes; + "discord-spoiler": LocalJSX.DiscordSpoiler & JSXBase.HTMLAttributes; + "discord-system-message": LocalJSX.DiscordSystemMessage & JSXBase.HTMLAttributes; + "discord-tenor-video": LocalJSX.DiscordTenorVideo & JSXBase.HTMLAttributes; + "discord-thread": LocalJSX.DiscordThread & JSXBase.HTMLAttributes; + "discord-thread-message": LocalJSX.DiscordThreadMessage & JSXBase.HTMLAttributes; + "discord-time": LocalJSX.DiscordTime & JSXBase.HTMLAttributes; + "discord-underlined": LocalJSX.DiscordUnderlined & JSXBase.HTMLAttributes; + } + } +} diff --git a/packages/discord-components-core/src/components/author-info/author-info.css b/packages/discord-components-core/src/components/author-info/author-info.css new file mode 100644 index 0000000..ab57339 --- /dev/null +++ b/packages/discord-components-core/src/components/author-info/author-info.css @@ -0,0 +1,76 @@ +.discord-message .discord-author-info { + display: inline-flex; + align-items: center; + font-size: 16px; + margin-right: 0.25rem; +} + +.discord-compact-mode .discord-message .discord-author-info { + margin-right: 0; +} + +.discord-message .discord-author-info .discord-author-username { + color: #fff; + font-size: 1em; + font-weight: 500; +} + +.discord-light-theme .discord-message .discord-author-info .discord-author-username { + color: #23262a; +} + +.discord-message .discord-author-info .discord-application-tag { + background-color: #5865f2; + color: #fff; + font-size: 0.625em; + margin-left: 4px; + border-radius: 3px; + line-height: 100%; + text-transform: uppercase; + /* Use flex layout to ensure both verified icon and "BOT" text are aligned to center */ + display: flex; + align-items: center; + /* Styling taken through Inspect Element on Discord client for Windows */ + height: 0.9375rem; + padding: 0 0.275rem; + margin-top: 0.075em; + border-radius: 0.1875rem; +} + +.discord-message .discord-author-info .discord-application-tag.discord-application-tag-op { + background-color: #c9cdfb; + color: #4752c4; + border-radius: 0.4rem; +} + +.discord-message .discord-author-info .discord-application-tag-verified { + display: inline-block; + width: 0.9375rem; + height: 0.9375rem; + margin-left: -0.25rem; +} + +.discord-message .discord-author-info .discord-author-role-icon { + margin-left: 0.25rem; + vertical-align: top; + height: calc(1rem + 4px); + width: calc(1rem + 4px); +} + +.discord-compact-mode .discord-message .discord-author-info .discord-author-username { + margin-left: 8px; + margin-right: 4px; +} + +.discord-compact-mode .discord-message .discord-author-info .discord-application-tag { + margin-left: 0; + margin-left: 5px; + margin-right: 5px; + padding-left: 10px; + padding-right: 4px; +} + +.discord-compact-mode .discord-message .discord-author-info .discord-application-tag-verified { + margin-right: 0.7em; + margin-left: -0.7em; +} diff --git a/packages/discord-components-core/src/components/author-info/author-info.tsx b/packages/discord-components-core/src/components/author-info/author-info.tsx new file mode 100644 index 0000000..913de87 --- /dev/null +++ b/packages/discord-components-core/src/components/author-info/author-info.tsx @@ -0,0 +1,74 @@ +import { FunctionalComponent, h } from '@stencil/core'; +import Fragment from '../../Fragment'; +import VerifiedTick from '../svgs/verified-tick'; + +interface AuthorInfoProps { + /** + * The name of the author + */ + author: string; + /** + * Whether this author is a bot. Only works if `server` is `false` or `undefined`. + */ + bot: boolean; + /** + * Whether this author is a `server` crosspost webhook. Only works if `bot` is `false` or `undefined`. + */ + server: boolean; + /** + * Whether this author is the original poster. + */ + op: boolean; + /** + * The colour of the author, which comes from their highest role + */ + roleColor: string; + /** + * The role icon of the author, which comes from their highest role + */ + roleIcon: string; + /** + * The role name of the author, which comes from their highest role + */ + roleName: string; + /** + * Whether this bot is verified by Discord. Only works if `bot` is `true` + */ + verified: boolean; + /** + * Whether to reverse the order of the author info for compact mode. + */ + compact: boolean; +} + +export const AuthorInfo: FunctionalComponent = ({ author, bot, server, op, roleColor, roleIcon, roleName, verified, compact }) => ( + + {!compact && ( + + + {author} + + {roleIcon && {roleName}} + + )} + { + + {/* If bot is true then we need to render a Bot tag */} + {bot && !server && ( + + {/* If verified is true then a verified checkmark should be prefixed */} + {verified && } + Bot + + )} + {server && !bot && Server} + {op && OP} + + } + {compact && ( + + {author} + + )} + +); diff --git a/packages/discord-components-core/src/components/discord-action-row/discord-action-row.css b/packages/discord-components-core/src/components/discord-action-row/discord-action-row.css new file mode 100644 index 0000000..8f335d0 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-action-row/discord-action-row.css @@ -0,0 +1,4 @@ +.discord-action-row { + display: flex; + flex-wrap: nowrap; +} diff --git a/packages/discord-components-core/src/components/discord-action-row/discord-action-row.tsx b/packages/discord-components-core/src/components/discord-action-row/discord-action-row.tsx new file mode 100644 index 0000000..afb628b --- /dev/null +++ b/packages/discord-components-core/src/components/discord-action-row/discord-action-row.tsx @@ -0,0 +1,15 @@ +import { Component, ComponentInterface, h, Host } from '@stencil/core'; + +@Component({ + tag: 'discord-action-row', + styleUrl: 'discord-action-row.css' +}) +export class DiscordActionRow implements ComponentInterface { + public render() { + return ( + + + + ); + } +} diff --git a/packages/discord-components-core/src/components/discord-action-row/readme.md b/packages/discord-components-core/src/components/discord-action-row/readme.md new file mode 100644 index 0000000..aef194f --- /dev/null +++ b/packages/discord-components-core/src/components/discord-action-row/readme.md @@ -0,0 +1,7 @@ +# discord-action-row + + + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-attachment/discord-attachment.css b/packages/discord-components-core/src/components/discord-attachment/discord-attachment.css new file mode 100644 index 0000000..74a5961 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-attachment/discord-attachment.css @@ -0,0 +1,86 @@ +.discord-attachment { + color: #dcddde; + display: flex; + font-size: 13px; + line-height: 150%; + margin-bottom: 8px; + margin-top: 8px; +} + +.discord-attachment .discord-image-wrapper { + display: block; + position: relative; + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; + overflow: hidden; + border-radius: 3px; +} + +.discord-attachment .discord-image-wrapper img, +.discord-attachment .discord-image-wrapper video { + max-width: 400px; + width: 100%; + height: auto; +} + +.discord-attachment-generic { + display: flex; + width: auto; + max-width: 520px; + height: 40px; + padding: 10px; + background-color: #2f3136; + border: 1px solid #292b2f; + border-radius: 3px; + overflow: hidden; +} + +.discord-attachment-generic-icon { + float: left; + height: 100%; + width: auto; +} + +.discord-attachment-generic-icon > svg { + width: 30px; + height: 100%; + margin-right: 10px; +} + +.discord-attachment-generic-inner { + flex-grow: 1; + width: fit-content; + height: 100%; +} + +.discord-attachment-generic-size { + color: #72767d; + font-size: 12px; + align-items: flex-start; + line-height: 100%; +} + +.discord-attachment-generic-name { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + width: fit-content; +} + +.discord-attachment-generic-download { + float: right; + height: 100%; + margin-left: 5px; + margin-right: 5px; +} + +.discord-attachment-generic-download > a > svg { + height: 100%; + color: rgb(185, 187, 190); +} + +.discord-attachment-generic-download > a > svg:hover { + color: rgb(220, 221, 222); +} diff --git a/packages/discord-components-core/src/components/discord-attachment/discord-attachment.tsx b/packages/discord-components-core/src/components/discord-attachment/discord-attachment.tsx new file mode 100644 index 0000000..5102be9 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-attachment/discord-attachment.tsx @@ -0,0 +1,130 @@ +import { Component, ComponentInterface, Element, h, Host, Prop } from '@stencil/core'; + +enum DiscordAttachmentType { + IMAGE = 'image', + VIDEO = 'video', + AUDIO = 'audio', + FILE = 'file' +} + +@Component({ + tag: 'discord-attachment', + styleUrl: 'discord-attachment.css' +}) +export class DiscordAttachment implements ComponentInterface { + /** + * The DiscordEmbed element. + */ + @Element() + public el: HTMLElement; + + /** + * The URL for the image attachment + * @important Should be a valid image URL, i.e. matching the regex `/\.(bmp|jpe?g|png|gif|webp|tiff)$/i` + */ + @Prop() + public url: string; + + /** + * The type of file the attachment is. + * 'image' | 'video' | 'audio' | 'file' + */ + @Prop() + public type: 'image' | 'video' | 'audio' | 'file'; + + /** + * The size of the file. + */ + @Prop() + public size: string; + + /** + * The height of the image in pixels + */ + @Prop() + public height?: number; + + /** + * The width of the image in pixels + */ + @Prop() + public width?: number; + + /** + * The alt text to show in case the image was unable to load + * @default 'discord attachment' + */ + @Prop() + public alt? = 'discord attachment'; + + public render() { + switch (this.type) { + case DiscordAttachmentType.IMAGE: + return ( + +
+ {this.alt} +
+
+ ); + + case DiscordAttachmentType.VIDEO: + return ( + +
+
+
+ ); + + case DiscordAttachmentType.AUDIO: + return ( + + + ); + + case DiscordAttachmentType.FILE: + default: + return ( + +
+ + + + +
+ +
+ + +
{this.size}
+
+ + +
+ ); + } + } +} diff --git a/packages/discord-components-core/src/components/discord-attachment/readme.md b/packages/discord-components-core/src/components/discord-attachment/readme.md new file mode 100644 index 0000000..bded40a --- /dev/null +++ b/packages/discord-components-core/src/components/discord-attachment/readme.md @@ -0,0 +1,18 @@ +# discord-attachment + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| -------- | --------- | --------------------------------------------------------------------------- | ----------------------------------------- | ---------------------- | +| `alt` | `alt` | The alt text to show in case the image was unable to load | `string \| undefined` | `'discord attachment'` | +| `height` | `height` | The height of the image in pixels | `number \| undefined` | `undefined` | +| `size` | `size` | The size of the file. | `string` | `undefined` | +| `type` | `type` | The type of file the attachment is. 'image' \| 'video' \| 'audio' \| 'file' | `"audio" \| "file" \| "image" \| "video"` | `undefined` | +| `url` | `url` | The URL for the image attachment | `string` | `undefined` | +| `width` | `width` | The width of the image in pixels | `number \| undefined` | `undefined` | + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-attachments/discord-attachments.css b/packages/discord-components-core/src/components/discord-attachments/discord-attachments.css new file mode 100644 index 0000000..d749e0b --- /dev/null +++ b/packages/discord-components-core/src/components/discord-attachments/discord-attachments.css @@ -0,0 +1,17 @@ +.discord-message .discord-attachments { + display: grid; + grid-auto-flow: row; + grid-row-gap: 0.25rem; + text-indent: 0; + min-height: 0; + min-width: 0; + padding-top: 0.125rem; + padding-bottom: 0.125rem; + position: relative; +} + +.discord-message .discord-attachments > * { + justify-self: start; + -ms-flex-item-align: start; + align-self: start; +} diff --git a/packages/discord-components-core/src/components/discord-attachments/discord-attachments.tsx b/packages/discord-components-core/src/components/discord-attachments/discord-attachments.tsx new file mode 100644 index 0000000..2c54505 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-attachments/discord-attachments.tsx @@ -0,0 +1,15 @@ +import { Component, ComponentInterface, h, Host } from '@stencil/core'; + +@Component({ + tag: 'discord-attachments', + styleUrl: 'discord-attachments.css' +}) +export class DiscordAttachments implements ComponentInterface { + public render() { + return ( + + + + ); + } +} diff --git a/packages/discord-components-core/src/components/discord-attachments/readme.md b/packages/discord-components-core/src/components/discord-attachments/readme.md new file mode 100644 index 0000000..58e9cb1 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-attachments/readme.md @@ -0,0 +1,7 @@ +# discord-attachments + + + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-bold/discord-bold.tsx b/packages/discord-components-core/src/components/discord-bold/discord-bold.tsx new file mode 100644 index 0000000..e87988b --- /dev/null +++ b/packages/discord-components-core/src/components/discord-bold/discord-bold.tsx @@ -0,0 +1,14 @@ +import { Component, h } from '@stencil/core'; + +@Component({ + tag: 'discord-bold' +}) +export class DiscordBold { + public render() { + return ( + + + + ); + } +} diff --git a/packages/discord-components-core/src/components/discord-bold/readme.md b/packages/discord-components-core/src/components/discord-bold/readme.md new file mode 100644 index 0000000..910b9fb --- /dev/null +++ b/packages/discord-components-core/src/components/discord-bold/readme.md @@ -0,0 +1,7 @@ +# discord-bold + + + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-button/discord-button.css b/packages/discord-components-core/src/components/discord-button/discord-button.css new file mode 100644 index 0000000..8d6e9d6 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-button/discord-button.css @@ -0,0 +1,72 @@ +.discord-button { + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + margin: 4px 8px 4px 0; + padding: 2px 16px; + width: auto; + height: 32px; + min-width: 60px; + min-height: 32px; + -webkit-transition: background-color 0.17s ease, color 0.17s ease; + transition: background-color 0.17s ease, color 0.17s ease; + border-radius: 3px; + font-size: 14px; + font-weight: 500; + line-height: 16px; + text-decoration: none !important; +} + +.discord-button.discord-button-success { + color: #fff; + background-color: #3ba55d; +} + +.discord-button.discord-button-success.discord-button-hoverable:hover { + background-color: #2d7d46; +} + +.discord-button.discord-button-destructive { + color: #fff; + background-color: #ed4245; +} + +.discord-button.discord-button-destructive.discord-button-hoverable:hover { + background-color: #c03537; +} + +.discord-button.discord-button-primary { + color: #fff; + background-color: #5865f2; +} + +.discord-button.discord-button-primary.discord-button-hoverable:hover { + background-color: #4752c4; +} + +.discord-button.discord-button-secondary { + color: #fff; + background-color: #4f545c; +} + +.discord-button.discord-button-secondary.discord-button-hoverable:hover { + background-color: #5d6269; +} + +.discord-button.discord-button-disabled { + cursor: not-allowed; + opacity: 0.5; +} + +.discord-button .discord-button-launch { + margin-left: 8px; +} + +.discord-button .discord-button-emoji { + margin-right: 4px; + object-fit: contain; + width: 1.375em; + height: 1.375em; + vertical-align: bottom; +} diff --git a/packages/discord-components-core/src/components/discord-button/discord-button.tsx b/packages/discord-components-core/src/components/discord-button/discord-button.tsx new file mode 100644 index 0000000..e3b7da2 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-button/discord-button.tsx @@ -0,0 +1,81 @@ +import { Component, ComponentInterface, Element, h, Host, Prop, Watch } from '@stencil/core'; +import Fragment from '../../Fragment'; +import LaunchIcon from '../svgs/launch-icon'; + +@Component({ + tag: 'discord-button', + styleUrl: 'discord-button.css' +}) +export class DiscordButton implements ComponentInterface { + /** + * The DiscordButton element. + */ + @Element() + public el: HTMLElement; + + /** + * The emoji URL to use in the button. + */ + @Prop() + public emoji: string; + + /** + * The name of the emoji used in the button. + */ + @Prop() + public emojiName = 'emoji'; + + /** + * The URL for the button. Setting this will force the button type to be `secondary`. + */ + @Prop() + public url: string; + + /** + * Whether to show the button as disabled. + */ + @Prop() + public disabled = false; + + /** + * The type of button this is, this will change the color of the button. + * Valid values: `primary`, `secondary`, `success`, `destructive`. + */ + @Prop() + public type: 'primary' | 'secondary' | 'success' | 'destructive' = 'secondary'; + + @Watch('type') + public handleType(value: string) { + if (typeof value !== 'string') { + throw new TypeError('DiscordButton `type` prop must be a string.'); + } else if (!['primary', 'secondary', 'success', 'destructive'].includes(value)) { + throw new RangeError("DiscordButton `type` prop must be one of: 'primary', 'secondary', 'success', 'destructive'"); + } + } + + public render() { + const parent: HTMLDiscordActionRowElement = this.el.parentElement as HTMLDiscordActionRowElement; + + if (parent.tagName.toLowerCase() !== 'discord-action-row') { + throw new Error('All components must be direct children of .'); + } + + const content = ( + + {this.emoji && {this.emojiName}} + + + + {this.url && } + + ); + + return this.url && !this.disabled ? ( + + {content} + + ) : ( + {content} + ); + } +} diff --git a/packages/discord-components-core/src/components/discord-button/readme.md b/packages/discord-components-core/src/components/discord-button/readme.md new file mode 100644 index 0000000..97048a0 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-button/readme.md @@ -0,0 +1,17 @@ +# discord-button + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| ----------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ------------- | +| `disabled` | `disabled` | Whether to show the button as disabled. | `boolean` | `false` | +| `emoji` | `emoji` | The emoji URL to use in the button. | `string` | `undefined` | +| `emojiName` | `emoji-name` | The name of the emoji used in the button. | `string` | `'emoji'` | +| `type` | `type` | The type of button this is, this will change the color of the button. Valid values: `primary`, `secondary`, `success`, `destructive`. | `"destructive" \| "primary" \| "secondary" \| "success"` | `'secondary'` | +| `url` | `url` | The URL for the button. Setting this will force the button type to be `secondary`. | `string` | `undefined` | + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-code-block/discord-code-block.css b/packages/discord-components-core/src/components/discord-code-block/discord-code-block.css new file mode 100644 index 0000000..a492d71 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-code-block/discord-code-block.css @@ -0,0 +1,39 @@ +/* .discord-message .discord-message-body .discord-spoiler */ + +.discord-code-block-pre { + background-color: #2f3136; + font-family: 'Consolas', 'Courier New', Courier, monospace; + margin-top: 0.25rem; + white-space: pre-wrap; +} + +.discord-code-block-pre--multiline { + display: block; + margin-bottom: 0.5rem; + margin-top: 0.25em; + padding: 0.5em; + border: 1px solid #202225; + border-radius: 4px; + color: #b9bbbe; + font-size: 0.875rem; +} + +.discord-code-block-pre--multiline.hljs { + background-color: #2f3136; + color: #b9bbbe; +} + +.discord-embed .discord-code-block-pre { + background-color: #202225; +} + +.discord-embed .discord-code-block-pre .hljs { + background-color: #202225; +} + +code.hljs { + padding: unset !important; +} + +/* I dont know what theme discord uses, but i thought this was close enough */ +@import '~highlight.js/styles/base16/helios.css'; diff --git a/packages/discord-components-core/src/components/discord-code-block/discord-code-block.tsx b/packages/discord-components-core/src/components/discord-code-block/discord-code-block.tsx new file mode 100644 index 0000000..72a8090 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-code-block/discord-code-block.tsx @@ -0,0 +1,31 @@ +import { Component, Host, h, Prop, ComponentInterface } from '@stencil/core'; +import hljs from 'highlight.js'; + +@Component({ + tag: 'discord-code-block', + styleUrl: 'discord-code-block.css' +}) +export class DiscordCodeBlock implements ComponentInterface { + /** + * The language of the code block. + */ + @Prop() + public language?: string; + + /** + * The code to display. + */ + @Prop() + public code: string; + + public render() { + // check if hljs has the language + const language = this.language ? (hljs.getLanguage(this.language) ? this.language : 'plaintext') : 'plaintext'; + + return ( + + + + ); + } +} diff --git a/packages/discord-components-core/src/components/discord-code-block/readme.md b/packages/discord-components-core/src/components/discord-code-block/readme.md new file mode 100644 index 0000000..82e0d14 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-code-block/readme.md @@ -0,0 +1,14 @@ +# discord-channel-header + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| ---------- | ---------- | ------------------------------- | --------------------- | ----------- | +| `code` | `code` | The code to display. | `string` | `undefined` | +| `language` | `language` | The language of the code block. | `string \| undefined` | `undefined` | + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-command/discord-command.css b/packages/discord-components-core/src/components/discord-command/discord-command.css new file mode 100644 index 0000000..036ba2a --- /dev/null +++ b/packages/discord-components-core/src/components/discord-command/discord-command.css @@ -0,0 +1,15 @@ +.discord-replied-message.discord-executed-command .discord-command-name { + color: #00aff4; + font-weight: 500; +} + +.discord-replied-message.discord-executed-command .discord-command-name:hover { + color: #00aff4; + text-decoration: underline; +} + +.discord-replied-message.discord-executed-command .discord-replied-message-username { + margin-right: 0; +} + +@import '../discord-reply/discord-reply.css'; diff --git a/packages/discord-components-core/src/components/discord-command/discord-command.tsx b/packages/discord-components-core/src/components/discord-command/discord-command.tsx new file mode 100644 index 0000000..f20323c --- /dev/null +++ b/packages/discord-components-core/src/components/discord-command/discord-command.tsx @@ -0,0 +1,79 @@ +import { Component, ComponentInterface, Element, h, Host, Prop } from '@stencil/core'; +import { avatars, Profile, profiles } from '../../options'; +import CommandIcon from '../svgs/command-icon'; + +@Component({ + tag: 'discord-command', + styleUrl: 'discord-command.css' +}) +export class DiscordCommand implements ComponentInterface { + /** + * The DiscordCommand element. + */ + @Element() + public el: HTMLElement; + + /** + * The id of the profile data to use. + */ + @Prop() + public profile: string; + + /** + * The message author's username. + * @default 'User' + */ + @Prop() + public author = 'User'; + + /** + * The message author's avatar. Can be an avatar shortcut, relative path, or external link. + */ + @Prop() + public avatar: string; + + /** + * The message author's primary role color. Can be any [CSS color value](https://www.w3schools.com/cssref/css_colors_legal.asp). + */ + @Prop() + public roleColor: string; + + /** + * The name of the command invoked. + */ + @Prop() + public command: string; + + public render() { + const parent: HTMLDiscordMessageElement = this.el.parentElement as HTMLDiscordMessageElement; + + if (parent.tagName.toLowerCase() !== 'discord-message') { + throw new Error('All components must be direct children of .'); + } + + const resolveAvatar = (avatar: string): string => avatars[avatar] ?? avatar ?? avatars.default; + + const defaultData: Profile = { author: this.author, bot: false, verified: false, server: false, roleColor: this.roleColor }; + const profileData: Profile = Reflect.get(profiles, this.profile) ?? {}; + const profile: Profile = { ...defaultData, ...profileData, ...{ avatar: resolveAvatar(profileData.avatar ?? this.avatar) } }; + + const messageParent: HTMLDiscordMessagesElement = parent.parentElement as HTMLDiscordMessagesElement; + + return ( + + {messageParent.compactMode ? ( +
+ +
+ ) : ( + {profile.author} + )} + + {profile.author} + + {' used '} +
{this.command}
+
+ ); + } +} diff --git a/packages/discord-components-core/src/components/discord-command/readme.md b/packages/discord-components-core/src/components/discord-command/readme.md new file mode 100644 index 0000000..458b9d9 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-command/readme.md @@ -0,0 +1,17 @@ +# discord-command + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| ----------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------- | -------- | ----------- | +| `author` | `author` | The message author's username. | `string` | `'User'` | +| `avatar` | `avatar` | The message author's avatar. Can be an avatar shortcut, relative path, or external link. | `string` | `undefined` | +| `command` | `command` | The name of the command invoked. | `string` | `undefined` | +| `profile` | `profile` | The id of the profile data to use. | `string` | `undefined` | +| `roleColor` | `role-color` | The message author's primary role color. Can be any [CSS color value](https://www.w3schools.com/cssref/css_colors_legal.asp). | `string` | `undefined` | + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-custom-emoji/discord-custom-emoji.css b/packages/discord-components-core/src/components/discord-custom-emoji/discord-custom-emoji.css new file mode 100644 index 0000000..1ec8eee --- /dev/null +++ b/packages/discord-components-core/src/components/discord-custom-emoji/discord-custom-emoji.css @@ -0,0 +1,27 @@ +.discord-custom-emoji { + display: inline-block; + cursor: pointer; + vertical-align: bottom; +} + +.discord-custom-emoji .discord-custom-emoji-image { + object-fit: contain; + width: 1.375rem; + height: 1.375rem; + vertical-align: bottom; +} + +.discord-custom-emoji .discord-custom-emoji-image-large { + width: 2.8em; + height: 2.8em; +} + +.discord-embed-custom-emoji { + display: inline-block; +} + +.discord-embed-custom-emoji .discord-embed-custom-emoji-image { + width: 18px; + height: 18px; + vertical-align: bottom; +} diff --git a/packages/discord-components-core/src/components/discord-custom-emoji/discord-custom-emoji.tsx b/packages/discord-components-core/src/components/discord-custom-emoji/discord-custom-emoji.tsx new file mode 100644 index 0000000..9aa6c05 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-custom-emoji/discord-custom-emoji.tsx @@ -0,0 +1,66 @@ +import { Component, ComponentInterface, Element, h, Prop } from '@stencil/core'; +import { getGlobalEmojiUrl } from '../../util'; + +@Component({ + tag: 'discord-custom-emoji', + styleUrl: 'discord-custom-emoji.css' +}) +export class DiscordCustomEmoji implements ComponentInterface { + /** + * The DiscordReaction element. + */ + @Element() + public el: HTMLElement; + + /** + * The name of the emoji + */ + @Prop() + public name: string; + + /** + * The emoji URL to use in the message. + */ + @Prop({ mutable: true }) + public url: string; + + /** + * Determines whether or not the emoji is used in an embed, or a message. + * If it is used in an embed, the sizing is adjusted accordingly. + */ + @Prop({ mutable: true }) + public embedEmoji: boolean; + + /** + * The emoji size + */ + @Prop() + public largeEmoji = false; + + public componentWillRender() { + if (!this.url && Boolean(this.name)) { + const emojiFromGlobal = getGlobalEmojiUrl(this.name); + + if (emojiFromGlobal) { + this.url ??= emojiFromGlobal.url ?? ''; + this.embedEmoji ??= emojiFromGlobal.embedEmoji ?? false; + } + } + } + + public render() { + const name = `:${this.name}:`; + const emojiClassName = this.embedEmoji ? 'discord-embed-custom-emoji' : 'discord-custom-emoji'; + let emojiImageClassName = this.embedEmoji ? 'discord-embed-custom-emoji-image' : 'discord-custom-emoji-image'; + + if (this.largeEmoji) { + emojiImageClassName += ' discord-custom-emoji-image-large'; + } + + return ( + + {name} + + ); + } +} diff --git a/packages/discord-components-core/src/components/discord-custom-emoji/readme.md b/packages/discord-components-core/src/components/discord-custom-emoji/readme.md new file mode 100644 index 0000000..ec29730 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-custom-emoji/readme.md @@ -0,0 +1,16 @@ +# discord-custom-emoji + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| ------------ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------- | --------- | ----------- | +| `embedEmoji` | `embed-emoji` | Determines whether or not the emoji is used in an embed, or a message. If it is used in an embed, the sizing is adjusted accordingly. | `boolean` | `undefined` | +| `largeEmoji` | `large-emoji` | The emoji size | `boolean` | `false` | +| `name` | `name` | The name of the emoji | `string` | `undefined` | +| `url` | `url` | The emoji URL to use in the message. | `string` | `undefined` | + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-embed-description/discord-embed-description.css b/packages/discord-components-core/src/components/discord-embed-description/discord-embed-description.css new file mode 100644 index 0000000..248bd85 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-embed-description/discord-embed-description.css @@ -0,0 +1,67 @@ +.discord-embed .discord-embed-description { + font-size: 0.875rem; + font-weight: 400; + grid-column: 1/1; + line-height: 1.125rem; + margin-top: 8px; + min-width: 0; + white-space: pre-line; +} + +.discord-embed .discord-embed-description pre { + margin: 0; + margin-top: 6px; +} + +.discord-embed .discord-embed-description img.emoji { + width: 22px; + height: 22px; +} + +.discord-embed .discord-embed-description blockquote { + position: relative; + padding: 0 8px 0 12px; + margin: 0; +} + +.discord-embed .discord-embed-description blockquote::before { + content: ''; + display: block; + position: absolute; + left: 0; + height: 100%; + width: 4px; + border-radius: 4px; + background-color: #4f545c; +} + +.discord-light-theme .discord-embed-description blockquote::before { + background-color: #c7ccd1; +} + +.discord-embed .discord-embed-description .spoiler { + background-color: #202225; + color: transparent; + cursor: pointer; +} + +.discord-light-theme .discord-embed .discord-embed-description .spoiler { + background-color: #b9bbbe; +} + +.discord-embed .discord-embed-description .spoiler:hover { + background-color: rgba(32, 34, 37, 0.8); +} + +.discord-light-theme .discord-embed .discord-embed-description .spoiler:hover { + background-color: rgba(185, 187, 190, 0.8); +} + +.discord-embed .discord-embed-description .spoiler:active { + color: inherit; + background-color: hsla(0, 0%, 100%, 0.1); +} + +.discord-light-theme .discord-embed .discord-embed-description .spoiler:active { + background-color: rgba(0, 0, 0, 0.1); +} diff --git a/packages/discord-components-core/src/components/discord-embed-description/discord-embed-description.tsx b/packages/discord-components-core/src/components/discord-embed-description/discord-embed-description.tsx new file mode 100644 index 0000000..4faa6e2 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-embed-description/discord-embed-description.tsx @@ -0,0 +1,27 @@ +import { Component, ComponentInterface, Element, h, Host } from '@stencil/core'; + +@Component({ + tag: 'discord-embed-description', + styleUrl: 'discord-embed-description.css' +}) +export class DiscordEmbedDescription implements ComponentInterface { + /** + * The DiscordEmbedDescription element. + */ + @Element() + public el: HTMLElement; + + public render() { + const parent: HTMLDiscordMessagesElement = this.el.parentElement as HTMLDiscordMessagesElement; + + if (parent.tagName.toLowerCase() !== 'div') { + throw new Error('All components must be direct children of .'); + } + + return ( + + + + ); + } +} diff --git a/packages/discord-components-core/src/components/discord-embed-description/readme.md b/packages/discord-components-core/src/components/discord-embed-description/readme.md new file mode 100644 index 0000000..f7e754c --- /dev/null +++ b/packages/discord-components-core/src/components/discord-embed-description/readme.md @@ -0,0 +1,7 @@ +# discord-embed-description + + + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-embed-field/discord-embed-field.css b/packages/discord-components-core/src/components/discord-embed-field/discord-embed-field.css new file mode 100644 index 0000000..63669bd --- /dev/null +++ b/packages/discord-components-core/src/components/discord-embed-field/discord-embed-field.css @@ -0,0 +1,38 @@ +.discord-embed .discord-embed-field { + font-size: 0.875rem; + line-height: 1.125rem; + min-width: 0; + font-weight: 400; + grid-column: 1/13; +} + +.discord-embed .discord-embed-field .discord-field-title { + color: #ffffff; + font-weight: 600; + font-size: 0.875rem; + line-height: 1.125rem; + min-width: 0; + margin-bottom: 2px; +} + +.discord-embed .discord-embed-field.discord-inline-field { + flex-grow: 1; + flex-basis: auto; + min-width: 150px; +} + +.discord-light-theme .discord-embed .discord-embed-field .discord-field-title { + color: #747f8d; +} + +.discord-embed-inline-field-3 { + grid-column: 9/13 !important; +} + +.discord-embed-inline-field-2 { + grid-column: 5/9 !important; +} + +.discord-embed-inline-field-1 { + grid-column: 1/5 !important; +} diff --git a/packages/discord-components-core/src/components/discord-embed-field/discord-embed-field.tsx b/packages/discord-components-core/src/components/discord-embed-field/discord-embed-field.tsx new file mode 100644 index 0000000..90d020d --- /dev/null +++ b/packages/discord-components-core/src/components/discord-embed-field/discord-embed-field.tsx @@ -0,0 +1,97 @@ +import { Component, ComponentInterface, Element, h, Host, Prop, Watch } from '@stencil/core'; +import clsx from 'clsx'; +import type { Emoji } from '../../options'; +import { getGlobalEmojiUrl } from '../../util'; + +@Component({ + tag: 'discord-embed-field', + styleUrl: 'discord-embed-field.css' +}) +export class DiscordEmbedField implements ComponentInterface { + /** + * The DiscordEmbedField element + */ + @Element() + public el: HTMLElement; + + /** + * The field's title. + */ + @Prop() + public fieldTitle!: string; + + /** + * Whether this field should be displayed inline or not. + */ + @Prop() + public inline = false; + + /** + * The index of this inline field + * @remark This defines the position of this inline field. 1 is left, 2 is middle and 3 is right. + * @oneof [1, 2, 3] + * @default 1 + */ + @Prop() + public inlineIndex = 1; + + private validInlineIndices = new Set([1, 2, 3]); + + @Watch('inlineIndex') + public checkInlineIndex(value: DiscordEmbedField['inlineIndex']) { + if (!this.validInlineIndices.has(Number(value))) throw new RangeError('DiscordEmbedField `inlineIndex` prop must be one of: 1, 2, or 3'); + } + + public componentWillRender() { + this.checkInlineIndex(this.inlineIndex); + } + + public render() { + const parent: HTMLDiscordEmbedFieldElement = this.el.parentElement as HTMLDiscordEmbedFieldElement; + + if (parent.tagName.toLowerCase() !== 'discord-embed-fields') { + throw new SyntaxError('All components must be direct children of .'); + } + + const emojiParsedEmbedFieldTitle = this.parseTitle(this.fieldTitle); + + return ( + + {emojiParsedEmbedFieldTitle &&
{[...emojiParsedEmbedFieldTitle]}
} + +
+ ); + } + + private parseTitle(title?: string) { + if (!title) return null; + + const words = title.split(' '); + + return words.map((word: string, idx: number) => { + const emoji = getGlobalEmojiUrl(word) ?? ({} as Emoji); + let el = ''; + if (emoji.name) { + el = ( + + {emoji.name} +   + + ); + } else { + el = idx < words.length - 1 ? `${word} ` : word; + } + return el; + }); + } +} diff --git a/packages/discord-components-core/src/components/discord-embed-field/readme.md b/packages/discord-components-core/src/components/discord-embed-field/readme.md new file mode 100644 index 0000000..f91f2e7 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-embed-field/readme.md @@ -0,0 +1,15 @@ +# discord-embed-field + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| ------------------------- | -------------- | ----------------------------------------------------- | --------- | ----------- | +| `fieldTitle` _(required)_ | `field-title` | The field's title. | `string` | `undefined` | +| `inline` | `inline` | Whether this field should be displayed inline or not. | `boolean` | `false` | +| `inlineIndex` | `inline-index` | The index of this inline field | `number` | `1` | + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-embed-fields/discord-embed-fields.css b/packages/discord-components-core/src/components/discord-embed-fields/discord-embed-fields.css new file mode 100644 index 0000000..a6307cc --- /dev/null +++ b/packages/discord-components-core/src/components/discord-embed-fields/discord-embed-fields.css @@ -0,0 +1,6 @@ +.discord-embed .discord-embed-fields { + display: grid; + grid-column: 1/1; + margin-top: 8px; + grid-gap: 8px; +} diff --git a/packages/discord-components-core/src/components/discord-embed-fields/discord-embed-fields.tsx b/packages/discord-components-core/src/components/discord-embed-fields/discord-embed-fields.tsx new file mode 100644 index 0000000..079ff6f --- /dev/null +++ b/packages/discord-components-core/src/components/discord-embed-fields/discord-embed-fields.tsx @@ -0,0 +1,15 @@ +import { Component, ComponentInterface, h, Host } from '@stencil/core'; + +@Component({ + tag: 'discord-embed-fields', + styleUrl: 'discord-embed-fields.css' +}) +export class DiscordEmbedFields implements ComponentInterface { + public render() { + return ( + + + + ); + } +} diff --git a/packages/discord-components-core/src/components/discord-embed-fields/readme.md b/packages/discord-components-core/src/components/discord-embed-fields/readme.md new file mode 100644 index 0000000..e858a7b --- /dev/null +++ b/packages/discord-components-core/src/components/discord-embed-fields/readme.md @@ -0,0 +1,7 @@ +# discord-embed-fields + + + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-embed-footer/discord-embed-footer.css b/packages/discord-components-core/src/components/discord-embed-footer/discord-embed-footer.css new file mode 100644 index 0000000..83a564f --- /dev/null +++ b/packages/discord-components-core/src/components/discord-embed-footer/discord-embed-footer.css @@ -0,0 +1,31 @@ +.discord-embed-footer { + -webkit-box-align: center; + align-items: center; + color: #dcddde; + display: flex; + font-size: 12px; + line-height: 16px; + font-weight: 500; + grid-column: 1/3; + grid-row: auto/auto; + margin-top: 8px; +} + +.discord-embed-footer .discord-footer-image { + border-radius: 50%; + flex-shrink: 0; + height: 20px; + margin-right: 8px; + width: 20px; +} + +.discord-embed-footer .discord-footer-separator { + color: #dcddde; + font-weight: 500; + display: inline-block; + margin: 0 4px; +} + +.discord-light-theme .discord-embed-footer .discord-footer-separator { + color: #e4e4e4; +} diff --git a/packages/discord-components-core/src/components/discord-embed-footer/discord-embed-footer.tsx b/packages/discord-components-core/src/components/discord-embed-footer/discord-embed-footer.tsx new file mode 100644 index 0000000..2c697ae --- /dev/null +++ b/packages/discord-components-core/src/components/discord-embed-footer/discord-embed-footer.tsx @@ -0,0 +1,56 @@ +import { Component, ComponentInterface, Element, h, Host, Prop, Watch } from '@stencil/core'; +import Fragment from '../../Fragment'; +import { DiscordTimestamp, handleTimestamp } from '../../util'; + +@Component({ + tag: 'discord-embed-footer', + styleUrl: 'discord-embed-footer.css' +}) +export class DiscordEmbedFooter implements ComponentInterface { + /** + * The DiscordEmbedFooter element. + */ + @Element() + public el: HTMLElement; + + /** + * The image to use next to the footer text. + */ + @Prop() + public footerImage: string; + + /** + * The timestamp to use for the message date. When supplying a string, the format must be `01/31/2000`. + */ + @Prop({ mutable: true, reflect: true }) + public timestamp?: DiscordTimestamp; + + @Watch('timestamp') + public updateTimestamp(value?: DiscordTimestamp): string | null { + if (!value || isNaN(new Date(value).getTime())) return null; + return handleTimestamp(new Date(value)); + } + + public componentWillRender() { + this.timestamp = this.updateTimestamp(this.timestamp); + } + + public render() { + const parent: HTMLDiscordMessagesElement = this.el.parentElement as HTMLDiscordMessagesElement; + + if (parent.tagName.toLowerCase() !== 'div') { + throw new Error('All components must be direct children of .'); + } + + return ( + + {this.footerImage ? : ''} + + + {this.timestamp ? : ''} + {this.timestamp ? {this.timestamp} : ''} + + + ); + } +} diff --git a/packages/discord-components-core/src/components/discord-embed-footer/readme.md b/packages/discord-components-core/src/components/discord-embed-footer/readme.md new file mode 100644 index 0000000..638cd28 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-embed-footer/readme.md @@ -0,0 +1,14 @@ +# discord-embed-footer + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| ------------- | -------------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------- | ----------- | +| `footerImage` | `footer-image` | The image to use next to the footer text. | `string` | `undefined` | +| `timestamp` | `timestamp` | The timestamp to use for the message date. When supplying a string, the format must be `01/31/2000`. | `Date \| null \| string \| undefined` | `undefined` | + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-embed/discord-embed.css b/packages/discord-components-core/src/components/discord-embed/discord-embed.css new file mode 100644 index 0000000..1bae025 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-embed/discord-embed.css @@ -0,0 +1,185 @@ +.discord-embed { + color: #dcddde; + display: flex; + font-size: 13px; + line-height: 150%; + margin-bottom: 2px; + margin-top: 2px; +} + +.discord-light-theme .discord-embed { + color: #2e3338; +} + +.discord-embed .discord-left-border { + background-color: #202225; + border-radius: 4px 0 0 4px; + flex-shrink: 0; + width: 4px; +} + +.discord-light-theme .discord-embed .discord-left-border { + background-color: #e3e5e8; +} + +.discord-embed .discord-embed-root { + display: grid; + grid-auto-flow: row; + grid-row-gap: 0.25rem; + min-height: 0; + min-width: 0; + text-indent: 0; +} + +.discord-embed .discord-embed-wrapper { + background-color: #2f3136; + max-width: 520px; + border: 1px solid rgba(46, 48, 54, 0.6); + border-radius: 0 4px 4px 0; + justify-self: start; + align-self: start; + display: grid; + box-sizing: border-box; +} + +.discord-light-theme .discord-embed .discord-embed-wrapper { + background-color: rgba(249, 249, 249, 0.3); + border-color: rgba(205, 205, 205, 0.3); +} + +.discord-embed .discord-embed-wrapper .discord-embed-grid { + display: inline-grid; + grid-template-columns: auto -webkit-min-content; + grid-template-columns: auto min-content; + grid-template-columns: auto; + grid-template-rows: auto; + padding: 0.5rem 1rem 1rem 0.75rem; +} + +.discord-embed .discord-embed-thumbnail { + border-radius: 4px; + flex-shrink: 0; + grid-column: 2/2; + grid-row: 1/8; + justify-self: end; + margin-left: 16px; + margin-top: 8px; + max-height: 80px; + max-width: 80px; + object-fit: contain; + object-position: top center; +} + +.discord-embed .discord-embed-author { + -webkit-box-align: center; + align-items: center; + color: #fff; + font-size: 14px; + display: flex; + font-weight: 600; + grid-column: 1 / 1; + margin-top: 8px; + min-width: 0; +} + +.discord-light-theme .discord-embed .discord-embed-author { + color: #4f545c; +} + +.discord-embed .discord-embed-author a { + color: #fff; + font-weight: 600; +} + +.discord-light-theme .discord-embed .discord-embed-author a { + color: #4f545c; +} + +.discord-embed .discord-embed-author .discord-author-image { + border-radius: 50%; + height: 24px; + margin-right: 8px; + width: 24px; +} + +.discord-embed .discord-embed-provider { + font-size: 0.75rem; + line-height: 1rem; + font-weight: 400; + grid-column: 1/1; + margin-top: 8px; + unicode-bidi: plaintext; + text-align: left; +} + +.discord-light-theme .discord-embed .discord-embed-provider { + color: #4f545c; +} + +.discord-embed .discord-embed-title { + -webkit-box-align: center; + align-items: center; + color: #fff; + display: inline-block; + font-size: 1rem; + font-weight: 600; + grid-column: 1 / 1; + margin-top: 8px; + min-width: 0; +} + +.discord-embed .discord-embed-title a { + color: #00aff4; + font-weight: 600; +} + +.discord-embed .discord-embed-image { + border-radius: 4px; + max-width: 100%; +} + +.discord-embed .discord-embed-media { + border-radius: 4px; + contain: paint; + display: block; + grid-column: 1/1; + margin-top: 16px; +} + +.discord-embed .discord-embed-media.discord-embed-media-video { + height: 225px; +} + +.discord-embed .discord-embed.media .discord-embed-image { + overflow: hidden; + position: relative; + user-select: text; +} + +.discord-embed .discord-embed-media .discord-embed-video { + -webkit-box-align: center; + -webkit-box-pack: center; + align-items: center; + border-radius: 0; + cursor: pointer; + display: flex; + height: 100%; + justify-content: center; + max-height: 100%; + width: 100%; + + width: 400px; + height: 225px; + left: 0px; + top: 0px; +} + +.discord-embed-custom-emoji { + display: inline-block; +} + +.discord-embed-custom-emoji .discord-embed-custom-emoji-image { + width: 18px; + height: 18px; + vertical-align: bottom; +} diff --git a/packages/discord-components-core/src/components/discord-embed/discord-embed.tsx b/packages/discord-components-core/src/components/discord-embed/discord-embed.tsx new file mode 100644 index 0000000..e7851e8 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-embed/discord-embed.tsx @@ -0,0 +1,194 @@ +import { Component, ComponentInterface, Element, h, Prop, State } from '@stencil/core'; +import clsx from 'clsx'; +import Fragment from '../../Fragment'; +import type { Emoji } from '../../options'; +import { getGlobalEmojiUrl } from '../../util'; + +@Component({ + tag: 'discord-embed', + styleUrl: 'discord-embed.css' +}) +export class DiscordEmbed implements ComponentInterface { + /** + * The DiscordEmbed element. + */ + @Element() + public el: HTMLElement; + + /** + * The color to use for the embed's left border. Can be any [CSS color value](https://www.w3schools.com/cssref/css_colors_legal.asp). + */ + @Prop() + public color: string; + + /** + * The author's name. + */ + @Prop() + public authorName: string; + + /** + * The author's avatar URL. + */ + @Prop() + public authorImage: string; + + /** + * The URL to open when you click on the author's name. + */ + @Prop() + public authorUrl: string; + + /** + * The embed title. + */ + @Prop() + public embedTitle: string; + + /** + * The URL to open when you click on the embed title. + */ + @Prop() + public url: string; + + /** + * The thumbnail image to use. + */ + @Prop() + public thumbnail: string; + + /** + * The embed image to use (displayed at the bottom). + */ + @Prop() + public image: string; + + /** + * The embed video to use (displayed at the bottom, same slot as the image). + * @important YouTube videos will not be playable on your projects, this is due to YouTube using DASH to play their videos rather + * than providing the raw media stream (in a container such as mp4 or ogg). Links to regular MP4 files (such as on a CDN) however + * will autoplay! + * @note Video takes priority over image. + * @remark Providing both a video and an image will ensure the image is shown to users with browsers + * that do not support HTML5 video playback. + * @example https://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_1080p_stereo.ogg + */ + @Prop() + public video: string; + + /** + * The provider to show above the embed, for example for YouTube videos it will show "YouTube" at the top of the embed (above the author) + * @example YouTube + */ + @Prop() + public provider: string; + + private hasPerformedRerenderChecks: 'dirty' | 'pristine' = 'pristine'; + + @State() + private hasProvidedDescriptionSlot = true; + + public componentDidRender() { + if (this.hasPerformedRerenderChecks === 'pristine') { + try { + const discordEmbedDescriptionChild = this.el.querySelector('.discord-embed-description'); + this.hasProvidedDescriptionSlot = Boolean(discordEmbedDescriptionChild?.innerHTML.trim()); + } finally { + this.hasPerformedRerenderChecks = 'dirty'; + } + } + } + + public render() { + const emojiParsedAuthorName = this.parseTitle(this.authorName); + const emojiParsedEmbedTitle = this.parseTitle(this.embedTitle); + + return ( +
+
+
+
+
+ {this.provider && ( +
+ {this.provider} +
+ )} + {emojiParsedAuthorName && ( +
+ {this.authorImage ? : ''} + {this.authorUrl ? ( + + {...emojiParsedAuthorName} + + ) : ( + {...emojiParsedAuthorName} + )} +
+ )} + {emojiParsedEmbedTitle && ( +
+ {this.url ? ( + + {...emojiParsedEmbedTitle} + + ) : ( + {...emojiParsedEmbedTitle} + )} +
+ )} + + {this.hasProvidedDescriptionSlot && } + + + {this.image || this.video ? ( +
+ {this.renderMedia()} +
+ ) : null} + + {this.thumbnail ? : ''} + +
+
+
+
+ ); + } + + private renderMedia() { + if (this.video) { + return ( + + ); + } else if (this.image) { + return Discord embed media; + } + + return null; + } + + private parseTitle(title?: string) { + if (!title) return null; + + const words = title.split(' '); + + return words.map((word: string, idx: number) => { + const emoji = getGlobalEmojiUrl(word) ?? ({} as Emoji); + let el = ''; + if (emoji.name) { + el = ( + + {emoji.name} +   + + ); + } else { + el = idx < words.length - 1 ? `${word} ` : word; + } + return el; + }); + } +} diff --git a/packages/discord-components-core/src/components/discord-embed/readme.md b/packages/discord-components-core/src/components/discord-embed/readme.md new file mode 100644 index 0000000..daa6a8a --- /dev/null +++ b/packages/discord-components-core/src/components/discord-embed/readme.md @@ -0,0 +1,22 @@ +# discord-embed + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| ------------- | -------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----------- | +| `authorImage` | `author-image` | The author's avatar URL. | `string` | `undefined` | +| `authorName` | `author-name` | The author's name. | `string` | `undefined` | +| `authorUrl` | `author-url` | The URL to open when you click on the author's name. | `string` | `undefined` | +| `color` | `color` | The color to use for the embed's left border. Can be any [CSS color value](https://www.w3schools.com/cssref/css_colors_legal.asp). | `string` | `undefined` | +| `embedTitle` | `embed-title` | The embed title. | `string` | `undefined` | +| `image` | `image` | The embed image to use (displayed at the bottom). | `string` | `undefined` | +| `provider` | `provider` | The provider to show above the embed, for example for YouTube videos it will show "YouTube" at the top of the embed (above the author) | `string` | `undefined` | +| `thumbnail` | `thumbnail` | The thumbnail image to use. | `string` | `undefined` | +| `url` | `url` | The URL to open when you click on the embed title. | `string` | `undefined` | +| `video` | `video` | The embed video to use (displayed at the bottom, same slot as the image). | `string` | `undefined` | + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-header/discord-header.css b/packages/discord-components-core/src/components/discord-header/discord-header.css new file mode 100644 index 0000000..e383a53 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-header/discord-header.css @@ -0,0 +1,40 @@ +.discord-header { + display: flex; + flex-direction: row; + max-height: 5rem; + padding: 0.5rem; + gap: 0.5rem; + border-bottom: 1px solid rgba(79, 84, 92, 0.48); +} + +.discord-header-icon { + float: left; + width: 5rem; +} + +.discord-header-icon > div { + background-color: rgb(79, 84, 92); + border-radius: 50%; + width: 5rem; + height: 5rem; + text-align: center; + align-items: center; + justify-content: center; + display: flex; + font-size: xx-large; +} + +.discord-header-icon > img { + border-radius: 50%; + width: auto; + height: 100%; +} + +.discord-header-text { + flex-grow: 1; +} + +.discord-header-text-guild { + font-size: 1.5rem; + font-weight: bold; +} diff --git a/packages/discord-components-core/src/components/discord-header/discord-header.tsx b/packages/discord-components-core/src/components/discord-header/discord-header.tsx new file mode 100644 index 0000000..a729c65 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-header/discord-header.tsx @@ -0,0 +1,54 @@ +import { Component, Host, h, Prop, ComponentInterface } from '@stencil/core'; + +@Component({ + tag: 'discord-header', + styleUrl: 'discord-header.css' +}) +export class DiscordHeader implements ComponentInterface { + /** + * The guild name + */ + @Prop() + public guild: string; + + /** + * The name of the channel + */ + @Prop() + public channel: string; + + /** + * The icon to display. + */ + @Prop() + public icon?: string; + + public render() { + return ( + +
+ { + // if no guild icon, create one using the first letter of the guild name + this.icon ? ( + guild icon + ) : ( +
+ + {(() => { + const split = this.guild.split(' '); + return split.length > 1 ? split[0][0] + split[1][0] : split[0][0]; + })()} + +
+ ) + } +
+
+
{this.guild}
+
#{this.channel}
+ +
+
+ ); + } +} diff --git a/packages/discord-components-core/src/components/discord-header/readme.md b/packages/discord-components-core/src/components/discord-header/readme.md new file mode 100644 index 0000000..f03677e --- /dev/null +++ b/packages/discord-components-core/src/components/discord-header/readme.md @@ -0,0 +1,15 @@ +# discord-code-block + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| --------- | --------- | ----------------------- | --------------------- | ----------- | +| `channel` | `channel` | The name of the channel | `string` | `undefined` | +| `guild` | `guild` | The guild name | `string` | `undefined` | +| `icon` | `icon` | The icon to display. | `string \| undefined` | `undefined` | + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-inline-code/discord-inline-code.tsx b/packages/discord-components-core/src/components/discord-inline-code/discord-inline-code.tsx new file mode 100644 index 0000000..922e132 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-inline-code/discord-inline-code.tsx @@ -0,0 +1,14 @@ +import { Component, h } from '@stencil/core'; + +@Component({ + tag: 'discord-inline-code' +}) +export class DiscordInlineCode { + public render() { + return ( + + + + ); + } +} diff --git a/packages/discord-components-core/src/components/discord-inline-code/readme.md b/packages/discord-components-core/src/components/discord-inline-code/readme.md new file mode 100644 index 0000000..c06da72 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-inline-code/readme.md @@ -0,0 +1,7 @@ +# discord-inline-code + + + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-invite/discord-invite.css b/packages/discord-components-core/src/components/discord-invite/discord-invite.css new file mode 100644 index 0000000..a3cacdb --- /dev/null +++ b/packages/discord-components-core/src/components/discord-invite/discord-invite.css @@ -0,0 +1,180 @@ +.discord-invite { + background-color: #2f3136; + border-radius: 4px; + padding: 16px; + width: 432px; +} + +.discord-light-theme .discord-invite { + background-color: #f2f3f5; +} + +.discord-invite .discord-invite-header { + font-weight: 700; + font-size: 12px; + line-height: 16px; + margin-bottom: 12px; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + text-transform: uppercase; + color: #b9bbbe; +} + +.discord-light-theme .discord-invite .discord-invite-header { + color: #4f5660; +} + +.discord-invite .discord-invite-root { + display: flex; + flex-flow: row nowrap; +} + +.discord-invite .discord-invite-icon { + background-color: #36393f; + border-radius: 15px; + margin-right: 16px; + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 50px; + height: 50px; +} + +.discord-light-theme .discord-invite .discord-invite-icon { + background-color: #fff; +} + +.discord-invite .discord-invite-info { + font-family: Whitney, 'Source Sans Pro', ui-sans-serif, system-ui, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', Arial, + sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + display: flex; + flex: 1 1 auto; + flex-direction: column; + flex-wrap: nowrap; + align-items: stretch; + justify-content: center; +} + +.discord-invite .discord-invite-title { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + margin-bottom: 2px; + color: white; + font-size: 16px; + line-height: 20px; + font-weight: 700; + display: flex; + flex-direction: row; +} + +.discord-light-theme .discord-invite .discord-invite-title { + color: #060607; +} + +.discord-invite .discord-invite-name { + flex: 1 1 auto; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.discord-invite .discord-invite-counts { + display: flex; + align-items: center; + font-size: 14px; + font-weight: 600; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + color: #b9bbbe; + line-height: 16px; +} + +.discord-invite .discord-invite-status { + display: block; + margin-right: 4px; + width: 8px; + height: 8px; + border-radius: 50%; + background-color: #747f8d; +} + +.discord-invite .discord-invite-status-online { + background-color: #3ba55d; +} + +.discord-invite .discord-invite-count { + -webkit-box-flex: 0; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + margin-right: 8px; + color: #b9bbbe; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} + +.discord-invite .discord-invite-join { + display: flex; + justify-content: center; + align-items: center; + height: 40px; + padding: 0 20px; + align-self: center; + margin-left: 10px; + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + line-height: 20px; + border-radius: 3px; + font-size: 14px; + font-weight: 600; + color: white !important; + background-color: #3ba55d; + -webkit-transition: background-color 0.17s ease; + transition: background-color 0.17s ease; +} + +.discord-invite .discord-invite-join:hover { + background-color: #2d7d46; + text-decoration: none; +} + +.discord-invite .discord-invite-badge { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + margin-right: 8px; + width: 16px; + height: 16px; + align-self: center; + position: relative; +} + +.discord-invite .discord-invite-badge-verified { + color: #3ba55d; +} + +.discord-invite .discord-invite-badge-partnered { + color: #5865f2; +} + +.discord-invite .discord-invite-badge-container { + position: absolute; + top: -0.05px; + left: 0.05px; + right: 0; + bottom: 0; + display: flex; + align-items: center; + justify-content: center; + pointer-events: none; + color: white; +} + +.discord-light-theme .discord-invite .discord-invite-counts, +.discord-light-theme .discord-invite .discord-invite-count { + color: #4f5660; +} diff --git a/packages/discord-components-core/src/components/discord-invite/discord-invite.tsx b/packages/discord-components-core/src/components/discord-invite/discord-invite.tsx new file mode 100644 index 0000000..e77ed02 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-invite/discord-invite.tsx @@ -0,0 +1,114 @@ +import { Component, ComponentInterface, Element, h, Prop } from '@stencil/core'; +import { defaultDiscordAvatars } from '../../options'; +import GuildBadge from '../svgs/guild-badge'; +import PartnerBadgeOverlay from '../svgs/partner-badge-overlay'; +import VerifiedBadgeOverlay from '../svgs/verified-badge-overlay'; + +@Component({ + tag: 'discord-invite', + styleUrl: 'discord-invite.css' +}) +export class DiscordInvite implements ComponentInterface { + /** + * The DiscordInvite element. + */ + @Element() + public el: HTMLElement; + + /** + * The server icon to display for the invite. + */ + @Prop() + public icon = defaultDiscordAvatars.blue; + + /** + * The server's name. + * @default 'Discord Server' + */ + @Prop() + public name = 'Discord Server'; + + /** + * The URL to open when you click on the join button. + */ + @Prop() + public url: string; + + /** + * The number of members online on the server. + * @default 0 + */ + @Prop() + public online = 0; + + /** + * The number of members on the server. + * @default 0 + */ + @Prop() + public members = 0; + + /** + * Whether the server is verified. + * Only works if `partnered` is `false` or `undefined`. + */ + @Prop() + public verified = false; + + /** + * Whether the server is partnered. + * Only works if `verified` is `false` or `undefined`. + */ + @Prop() + public partnered = false; + + /** + * Invitation embed title. + * @default "You've been invited to join a server" + */ + @Prop() + public inviteTitle = "You've been invited to join a server"; + + /** + * The join button. + * @default 'Join' + */ + @Prop() + public joinBtn = 'Join'; + + public render() { + return ( +
+
{this.inviteTitle}
+
+ {this.name} +
+
+ {((this.verified && !this.partnered) || (!this.verified && this.partnered)) && ( +
+ +
+ {this.partnered ? : } +
+
+ )} + {this.name} +
+
+ + {this.online.toLocaleString()} Online + + {this.members.toLocaleString()} Members +
+
+ + {this.joinBtn} + +
+
+ ); + } +} diff --git a/packages/discord-components-core/src/components/discord-invite/readme.md b/packages/discord-components-core/src/components/discord-invite/readme.md new file mode 100644 index 0000000..8b99cfd --- /dev/null +++ b/packages/discord-components-core/src/components/discord-invite/readme.md @@ -0,0 +1,21 @@ +# discord-invite + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| ------------- | -------------- | ------------------------------------------------------------------------------------ | --------------------- | ---------------------------------------- | +| `icon` | `icon` | The server icon to display for the invite. | `string \| undefined` | `defaultDiscordAvatars.blue` | +| `inviteTitle` | `invite-title` | Invitation embed title. | `string` | `"You've been invited to join a server"` | +| `joinBtn` | `join-btn` | The join button. | `string` | `'Join'` | +| `members` | `members` | The number of members on the server. | `number` | `0` | +| `name` | `name` | The server's name. | `string` | `'Discord Server'` | +| `online` | `online` | The number of members online on the server. | `number` | `0` | +| `partnered` | `partnered` | Whether the server is partnered. Only works if `verified` is `false` or `undefined`. | `boolean` | `false` | +| `url` | `url` | The URL to open when you click on the join button. | `string` | `undefined` | +| `verified` | `verified` | Whether the server is verified. Only works if `partnered` is `false` or `undefined`. | `boolean` | `false` | + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-italic/discord-italic.tsx b/packages/discord-components-core/src/components/discord-italic/discord-italic.tsx new file mode 100644 index 0000000..e203ab3 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-italic/discord-italic.tsx @@ -0,0 +1,14 @@ +import { Component, h } from '@stencil/core'; + +@Component({ + tag: 'discord-italic' +}) +export class DiscordItalic { + public render() { + return ( + + + + ); + } +} diff --git a/packages/discord-components-core/src/components/discord-italic/readme.md b/packages/discord-components-core/src/components/discord-italic/readme.md new file mode 100644 index 0000000..83b1a8c --- /dev/null +++ b/packages/discord-components-core/src/components/discord-italic/readme.md @@ -0,0 +1,7 @@ +# discord-italic + + + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-mention/discord-mention.css b/packages/discord-components-core/src/components/discord-mention/discord-mention.css new file mode 100644 index 0000000..1652708 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-mention/discord-mention.css @@ -0,0 +1,49 @@ +.discord-message .discord-mention { + color: #e3e7f8; + background-color: hsla(235, 85.6%, 64.7%, 0.3); + font-weight: 500; + padding: 0 2px; + border-radius: 3px; + unicode-bidi: -moz-plaintext; + unicode-bidi: plaintext; + -webkit-transition: background-color 50ms ease-out, color 50ms ease-out; + transition: background-color 50ms ease-out, color 50ms ease-out; + cursor: pointer; +} + +.discord-message .discord-mention:hover { + color: #fff; + background-color: hsl(235, 85.6%, 64.7%); +} + +.discord-message .discord-mention.discord-channel-mention { + padding-left: 1.2rem !important; + position: relative; +} + +.discord-message .discord-mention.discord-voice-mention, +.discord-message .discord-mention.discord-locked-mention, +.discord-message .discord-mention.discord-thread-mention, +.discord-message .discord-mention.discord-forum-mention { + padding-left: 1.25rem !important; + position: relative; +} + +.discord-light-theme .discord-message .discord-mention { + color: #687dc6; + background-color: hsla(235, 85.6%, 64.7%, 0.15); +} + +.discord-light-theme .discord-message .discord-mention:hover { + color: #ffffff; + background-color: hsl(235, 85.6%, 64.7%); +} + +.discord-message .discord-mention .discord-mention-icon { + width: 1rem; + height: 1rem; + object-fit: contain; + position: absolute; + left: 0.125rem; + top: 0.125rem; +} diff --git a/packages/discord-components-core/src/components/discord-mention/discord-mention.tsx b/packages/discord-components-core/src/components/discord-mention/discord-mention.tsx new file mode 100644 index 0000000..d9d298f --- /dev/null +++ b/packages/discord-components-core/src/components/discord-mention/discord-mention.tsx @@ -0,0 +1,118 @@ +import { Component, ComponentInterface, Element, h, Host, Prop, Watch } from '@stencil/core'; +import hexToRgba from 'hex-to-rgba'; +import ChannelForum from '../svgs/channel-forum'; +import ChannelIcon from '../svgs/channel-icon'; +import ChannelThread from '../svgs/channel-thread'; +import LockedVoiceChannel from '../svgs/locked-voice-channel'; +import VoiceChannel from '../svgs/voice-channel'; + +@Component({ + tag: 'discord-mention', + styleUrl: 'discord-mention.css' +}) +export class DiscordMention implements ComponentInterface { + /** + * The DiscordMention element + */ + @Element() + public el: HTMLElement; + + /** + * Whether this entire message block should be highlighted (to emulate the "logged in user" being pinged). + */ + @Prop() + public highlight = false; + + /** + * The color to use for this mention. Only works for role mentions and must be in hex format. + */ + @Prop() + public color: string; + + /** + * The type of mention this should be. This will prepend the proper prefix character. + * Valid values: `user`, `channel`, `role`, `voice`, `locked`, `thread`, `forum`, and `slash`. + */ + @Prop() + public type: 'user' | 'channel' | 'role' | 'voice' | 'locked' | 'thread' | 'forum' | 'slash' = 'user'; + + @Watch('type') + public handleType(value: string) { + if (typeof value !== 'string') { + throw new TypeError('DiscordMention `type` prop must be a string.'); + } else if (!['user', 'channel', 'role', 'voice', 'locked', 'thread', 'forum', 'slash'].includes(value)) { + throw new RangeError( + "DiscordMention `type` prop must be one of: 'user', 'channel', 'role', 'voice', 'locked', 'thread', 'forum', 'slash'" + ); + } + } + + public componentWillRender() { + this.handleType(this.type); + } + + public componentDidLoad() { + if (this.color && this.type === 'role') { + this.el.addEventListener('mouseover', this.setHoverColor.bind(this)); + this.el.addEventListener('mouseout', this.resetHoverColor.bind(this)); + } + } + + public disconnectedCallback() { + if (this.color && this.type === 'role') { + this.el.removeEventListener('mouseover', this.setHoverColor.bind(this)); + this.el.removeEventListener('mouseout', this.resetHoverColor.bind(this)); + } + } + + public setHoverColor() { + this.el.style.backgroundColor = hexToRgba(this.color, 0.3); + } + + public resetHoverColor() { + this.el.style.backgroundColor = hexToRgba(this.color, 0.1); + } + + public render() { + const { color, type }: { color?: string; type?: string } = this; + + const colorStyle: { + color?: string; + 'background-color'?: string; + } = !color || type !== 'role' ? {} : { color, 'background-color': hexToRgba(color, 0.1) }; + + let mentionPrepend = ''; + + switch (this.type) { + case 'channel': + mentionPrepend = ; + break; + case 'user': + case 'role': + mentionPrepend = '@'; + break; + case 'voice': + mentionPrepend = ; + break; + case 'locked': + mentionPrepend = ; + break; + case 'thread': + mentionPrepend = ; + break; + case 'forum': + mentionPrepend = ; + break; + case 'slash': + mentionPrepend = '/'; + break; + } + + return ( + + {mentionPrepend} + + + ); + } +} diff --git a/packages/discord-components-core/src/components/discord-mention/readme.md b/packages/discord-components-core/src/components/discord-mention/readme.md new file mode 100644 index 0000000..bd40810 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-mention/readme.md @@ -0,0 +1,15 @@ +# discord-mention + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| ----------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------- | ----------- | +| `color` | `color` | The color to use for this mention. Only works for role mentions and must be in hex format. | `string` | `undefined` | +| `highlight` | `highlight` | Whether this entire message block should be highlighted (to emulate the "logged in user" being pinged). | `boolean` | `false` | +| `type` | `type` | The type of mention this should be. This will prepend the proper prefix character. Valid values: `user`, `channel`, `role`, `voice`, `locked`, `thread`, `forum`, and `slash`. | `"channel" \| "forum" \| "locked" \| "role" \| "slash" \| "thread" \| "user" \| "voice"` | `'user'` | + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-message/discord-message.css b/packages/discord-components-core/src/components/discord-message/discord-message.css new file mode 100644 index 0000000..0d988de --- /dev/null +++ b/packages/discord-components-core/src/components/discord-message/discord-message.css @@ -0,0 +1,290 @@ +.discord-message { + color: #dcddde; + display: flex; + flex-direction: column; + font-size: 0.9em; + font-family: Whitney, 'Source Sans Pro', ui-sans-serif, system-ui, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', Arial, + sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + padding: 0px 1em; + + position: relative; + word-wrap: break-word; + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + padding-right: 0; + min-height: 1.375rem; + padding-right: 48px !important; + margin-top: 1.0625rem; +} + +.discord-message .discord-message-inner { + display: flex; + position: relative; + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; +} + +.discord-message.discord-highlight-mention, +.discord-message.discord-highlight-ephemeral { + padding-right: 5px; + position: relative; +} + +.discord-message.discord-highlight-mention::before, +.discord-message.discord-highlight-ephemeral::before { + content: ''; + position: absolute; + display: block; + top: 0; + left: 0; + bottom: 0; + pointer-events: none; + width: 2px; +} + +.discord-message.discord-highlight-mention { + background-color: rgba(250, 166, 26, 0.1); +} + +.discord-light-theme .discord-message.discord-highlight-mention { + background-color: rgba(250, 166, 26, 0.1); +} + +.discord-message.discord-highlight-mention:hover { + background-color: rgba(250, 166, 26, 0.08); +} + +.discord-light-theme .discord-message.discord-highlight-mention:hover { + background-color: rgba(250, 166, 26, 0.2); +} + +.discord-message.discord-highlight-mention::before { + background-color: #faa61a; +} + +.discord-message.discord-highlight-ephemeral { + background-color: rgba(88, 101, 242, 0.05); +} + +.discord-light-theme .discord-message.discord-highlight-ephemeral { + background-color: rgba(250, 166, 26, 0.1); +} + +.discord-message.discord-highlight-ephemeral:hover { + background-color: rgba(88, 101, 242, 0.1); +} + +.discord-message.discord-highlight-ephemeral::before { + background-color: #5865f2; +} + +.discord-light-theme .discord-message { + color: #2e3338; + border-color: #eceeef; +} + +.discord-message a { + color: #00aff4; + font-weight: normal; + text-decoration: none; +} + +.discord-message a:hover { + text-decoration: underline; +} + +.discord-light-theme .discord-message a { + color: #00b0f4; +} + +.discord-message a:hover { + text-decoration: underline; +} + +.discord-message .discord-author-avatar { + margin-right: 16px; + margin-top: 5px; + min-width: 40px; + z-index: 1; +} + +.discord-message .discord-author-avatar img { + width: 40px; + height: 40px; + border-radius: 50%; +} + +.discord-message .discord-message-timestamp { + color: #72767d; + font-size: 12px; + margin-left: 3px; +} + +.discord-light-theme .discord-message .discord-message-timestamp { + color: #747f8d; +} + +.discord-message .discord-message-edited { + color: #72767d; + font-size: 10px; +} + +.discord-light-theme .discord-message .discord-message-edited { + color: #99aab5; +} + +.discord-message .discord-message-content { + width: 100%; + line-height: 160%; + font-weight: normal; + padding-top: 2px; +} + +.discord-message .discord-message-body { + font-size: 1rem; + font-weight: 400; + word-break: break-word; + position: relative; +} + +.discord-message .discord-message-body strong { + font-weight: 700; +} + +.discord-message .discord-message-body em { + font-style: italic; +} + +.discord-message .discord-message-body u { + text-decoration-color: rgb(220, 221, 222); + text-decoration-line: underline; + text-decoration-style: solid; + text-decoration-thickness: auto; +} + +.discord-message .discord-message-body pre { + border: 1px solid #202225; + border-radius: 4px; +} + +.discord-message .discord-message-body code { + background: #2f3136; + white-space: break-spaces; + font-family: Consolas, Andale Mono WT, Andale Mono, Lucida Console, Lucida Sans Typewriter, DejaVu Sans Mono, Bitstream Vera Sans Mono, + Liberation Mono, Nimbus Mono L, Monaco, Courier New, Courier, monospace; +} + +.discord-light-theme .discord-message .discord-message-timestamp, +.discord-compact-mode .discord-message:hover .discord-message-timestamp, +.discord-compact-mode.discord-light-theme .discord-message:hover .discord-message-timestamp { + color: #99aab5; +} + +.discord-compact-mode.discord-light-theme .discord-message .discord-message-timestamp { + color: #d1d9de; +} + +.discord-compact-mode .discord-message .discord-message-timestamp { + display: inline-block; + width: 3.1rem; + text-align: right; + font-size: 0.6875rem; + line-height: 1.375rem; + margin-right: 0.25rem; + margin-left: 0; + text-indent: 0; +} + +.discord-compact-mode .discord-message { + margin-top: unset; +} + +.discord-compact-mode .discord-message .discord-message-body { + line-height: 1.375rem; + padding-left: 10px; + text-indent: -6px; +} + +.discord-compact-mode .discord-message .discord-message-compact-indent { + padding-left: 10px; +} + +.discord-message:first-child { + margin-top: 0.5rem; +} + +.discord-message:last-child { + margin-bottom: 0.5rem; + border-bottom-width: 0; +} + +.discord-message .discord-message-markup { + font-size: 1rem; + line-height: 1.375rem; + word-wrap: break-word; + user-select: text; + font-weight: 400; +} + +.discord-compact-mode .discord-author-avatar { + display: none; +} + +.discord-message:hover { + background-color: rgba(4, 4, 5, 0.07); +} + +.discord-light-theme .discord-message:hover { + background-color: rgba(6, 6, 7, 0.02); +} + +.discord-message.discord-message-has-thread:after { + width: 2rem; + left: 2.2rem; + top: 1.75rem; + border-left: 2px solid #4f545c; + border-bottom: 2px solid #4f545c; + border-bottom-left-radius: 8px; + bottom: 29px; + content: ''; + position: absolute; +} + +.discord-light-theme .discord-message.discord-message-has-thread:after { + border-color: #747f8d; +} + +.discord-message-ephemeral { + color: #72767d; + margin-top: 4px; + font-size: 12px; + font-weight: 400; + color: #72767d; +} + +.discord-light-theme .discord-message-ephemeral { + color: #747f8d; +} + +.discord-message-ephemeral .discord-message-ephemeral-link { + color: #00aff4; + font-weight: 500; + cursor: pointer; +} + +.discord-message-ephemeral .discord-message-ephemeral-link:hover { + text-decoration: underline; +} + +.discord-message-ephemeral .discord-message-ephemeral-icon { + margin-right: 4px; + vertical-align: text-bottom; +} + +@import '../author-info/author-info.css'; diff --git a/packages/discord-components-core/src/components/discord-message/discord-message.tsx b/packages/discord-components-core/src/components/discord-message/discord-message.tsx new file mode 100644 index 0000000..b3eef2b --- /dev/null +++ b/packages/discord-components-core/src/components/discord-message/discord-message.tsx @@ -0,0 +1,225 @@ +import { Component, ComponentInterface, Element, h, Host, Prop, Watch } from '@stencil/core'; +import clsx from 'clsx'; +import Fragment from '../../Fragment'; +import { avatars, Profile, profiles } from '../../options'; +import { DiscordTimestamp, handleTimestamp } from '../../util'; +import { AuthorInfo } from '../author-info/author-info'; +import Ephemeral from '../svgs/ephemeral'; + +@Component({ + tag: 'discord-message', + styleUrl: 'discord-message.css' +}) +export class DiscordMessage implements ComponentInterface { + /** + * The DiscordMessage element. + */ + @Element() + public el: HTMLElement; + + /** + * The id of the profile data to use. + */ + @Prop() + public profile: string; + + /** + * The message author's username. + * @default 'User' + */ + @Prop() + public author = 'User'; + + /** + * The message author's avatar. Can be an avatar shortcut, relative path, or external link. + */ + @Prop() + public avatar: string; + + /** + * Whether the message author is a bot or not. + * Only works if `server` is `false` or `undefined`. + */ + @Prop() + public bot = false; + + /** + * Whether the message author is a server crosspost webhook or not. + * Only works if `bot` is `false` or `undefined`. + */ + @Prop() + public server = false; + + /** + * Whether the bot is verified or not. + * Only works if `bot` is `true` + */ + @Prop() + public verified = false; + + /** + * Whether the author is the original poster. + */ + @Prop() + public op = false; + + /** + * Whether the message has been edited or not. + */ + @Prop() + public edited = false; + + /** + * The message author's primary role color. Can be any [CSS color value](https://www.w3schools.com/cssref/css_colors_legal.asp). + */ + @Prop() + public roleColor: string; + + /** + * The message author's role icon URL. + */ + @Prop() + public roleIcon: string; + + /** + * The name of the role to use as alternative image text. + */ + @Prop() + public roleName: string; + + /** + * Whether to highlight this message. + */ + @Prop() + public highlight = false; + + /** + * Whether to make this message ephemeral. + */ + @Prop() + public ephemeral = false; + + /** + * The timestamp to use for the message date. + */ + @Prop({ mutable: true, reflect: true }) + public timestamp: DiscordTimestamp = new Date(); + + /** + * Whether to use 24-hour format for the timestamp. + */ + @Prop() + public twentyFour = false; + + @Watch('timestamp') + public updateTimestamp(value: DiscordTimestamp): string | null { + return handleTimestamp(value, this.twentyFour); + } + + public componentWillRender() { + this.timestamp = handleTimestamp(this.timestamp, this.twentyFour); + } + + public render() { + const parent: HTMLDiscordMessagesElement = this.el.parentElement as HTMLDiscordMessagesElement; + + if (parent.tagName.toLowerCase() !== 'discord-messages') { + throw new Error('All components must be direct children of .'); + } + + const resolveAvatar = (avatar: string): string => avatars[avatar] ?? avatar ?? avatars.default; + + const defaultData: Profile = { + author: this.author, + bot: this.bot, + verified: this.verified, + server: this.server, + op: this.op, + roleColor: this.roleColor, + roleIcon: this.roleIcon, + roleName: this.roleName + }; + const profileData: Profile = Reflect.get(profiles, this.profile) ?? {}; + const profile: Profile = { ...defaultData, ...profileData, ...{ avatar: resolveAvatar(profileData.avatar ?? this.avatar) } }; + + const highlightMention: boolean = + // @ts-expect-error ts doesn't understand this + Array.from(this.el.children).some((child: HTMLDiscordMentionElement): boolean => { + return child.tagName.toLowerCase() === 'discord-mention' && child.highlight && ['user', 'role'].includes(child.type); + }) || this.highlight; + + const hasThread: boolean = + // @ts-expect-error ts doesn't understand this + Array.from(this.el.children).some((child: HTMLDiscordThreadElement): boolean => { + return child.tagName.toLowerCase() === 'discord-thread'; + }); + + return ( + + +
+ {parent.compactMode && {this.timestamp}} +
+ {profile.author} +
+
+ {!parent.compactMode && ( + + + {this.timestamp} + + )} +
+ {parent.compactMode && ( + + )} + + + + {this.edited ? (edited) : ''} +
+
+ + + + + + {this.ephemeral && ( +
+ + Only you can see this • Dismiss message +
+ )} +
+
+
+
+ ); + } +} diff --git a/packages/discord-components-core/src/components/discord-message/readme.md b/packages/discord-components-core/src/components/discord-message/readme.md new file mode 100644 index 0000000..5c4e3dc --- /dev/null +++ b/packages/discord-components-core/src/components/discord-message/readme.md @@ -0,0 +1,27 @@ +# discord-message + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| ------------ | ------------- | ----------------------------------------------------------------------------------------------------------------------------- | ------------------------ | ------------ | +| `author` | `author` | The message author's username. | `string` | `'User'` | +| `avatar` | `avatar` | The message author's avatar. Can be an avatar shortcut, relative path, or external link. | `string` | `undefined` | +| `bot` | `bot` | Whether the message author is a bot or not. Only works if `server` is `false` or `undefined`. | `boolean` | `false` | +| `edited` | `edited` | Whether the message has been edited or not. | `boolean` | `false` | +| `ephemeral` | `ephemeral` | Whether to make this message ephemeral. | `boolean` | `false` | +| `highlight` | `highlight` | Whether to highlight this message. | `boolean` | `false` | +| `op` | `op` | Whether the author is the original poster. | `boolean` | `false` | +| `profile` | `profile` | The id of the profile data to use. | `string` | `undefined` | +| `roleColor` | `role-color` | The message author's primary role color. Can be any [CSS color value](https://www.w3schools.com/cssref/css_colors_legal.asp). | `string` | `undefined` | +| `roleIcon` | `role-icon` | The message author's role icon URL. | `string` | `undefined` | +| `roleName` | `role-name` | The name of the role to use as alternative image text. | `string` | `undefined` | +| `server` | `server` | Whether the message author is a server crosspost webhook or not. Only works if `bot` is `false` or `undefined`. | `boolean` | `false` | +| `timestamp` | `timestamp` | The timestamp to use for the message date. | `Date \| null \| string` | `new Date()` | +| `twentyFour` | `twenty-four` | Whether to use 24-hour format for the timestamp. | `boolean` | `false` | +| `verified` | `verified` | Whether the bot is verified or not. Only works if `bot` is `true` | `boolean` | `false` | + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-messages/discord-messages.css b/packages/discord-components-core/src/components/discord-messages/discord-messages.css new file mode 100644 index 0000000..570c86d --- /dev/null +++ b/packages/discord-components-core/src/components/discord-messages/discord-messages.css @@ -0,0 +1,48 @@ +@import url('https://fonts.bunny.net/css?family=roboto:400,500,700'); + +/* New Whitney fonts to match rebrading */ +@font-face { + font-family: 'Whitney'; + src: url('https://cdn.jsdelivr.net/gh/ItzDerock/discord-components@master/assets/fonts/Book.woff') format('woff'); + font-weight: 400; + font-display: swap; +} +@font-face { + font-family: 'Whitney'; + src: url('https://cdn.jsdelivr.net/gh/ItzDerock/discord-components@master/assets/fonts/Medium.woff') format('woff'); + font-weight: 500; + font-display: swap; +} +@font-face { + font-family: 'Whitney'; + src: url('https://cdn.jsdelivr.net/gh/ItzDerock/discord-components@master/assets/fonts/Semibold.woff') format('woff'); + font-weight: 600; + font-display: swap; +} +@font-face { + font-family: 'Whitney'; + src: url('https://cdn.jsdelivr.net/gh/ItzDerock/discord-components@master/assets/fonts/Bold.woff') format('woff'); + font-weight: 700; + font-display: swap; +} + +.discord-messages { + color: #fff; + background-color: #36393e; + display: block; + font-size: 16px; + font-family: Whitney, 'Source Sans Pro', ui-sans-serif, system-ui, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', Arial, + sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + line-height: 170%; + border: 1px solid rgba(255, 255, 255, 0.05); +} + +.discord-messages.discord-light-theme { + color: #747f8d; + background-color: #fff; + border-color: #dedede; +} + +.discord-messages.discord-no-background { + background-color: unset; +} diff --git a/packages/discord-components-core/src/components/discord-messages/discord-messages.tsx b/packages/discord-components-core/src/components/discord-messages/discord-messages.tsx new file mode 100644 index 0000000..498479b --- /dev/null +++ b/packages/discord-components-core/src/components/discord-messages/discord-messages.tsx @@ -0,0 +1,58 @@ +import { Component, ComponentInterface, h, Host, Prop } from '@stencil/core'; +import clsx from 'clsx'; +import { defaultBackground, defaultMode, defaultTheme } from '../../options'; + +@Component({ + tag: 'discord-messages', + styleUrl: 'discord-messages.css' +}) +export class DiscordMessages implements ComponentInterface { + /** + * Whether to use light theme or not. + */ + @Prop({ mutable: true, reflect: true }) + public lightTheme: boolean; + + /** + * Whether to exclude the background or not. + */ + @Prop({ mutable: true, reflect: true }) + public noBackground: boolean; + + /** + * Whether to use compact mode or not. + */ + @Prop({ mutable: true, reflect: true }) + public compactMode: boolean; + + public componentWillRender() { + if (this.lightTheme || (defaultTheme === 'light' && this.lightTheme)) { + this.lightTheme = true; + } + + if (this.compactMode || (defaultMode === 'compact' && this.compactMode)) { + this.compactMode = true; + } + + if (this.noBackground || (defaultBackground === 'none' && this.noBackground)) { + this.noBackground = true; + } + } + + public render() { + return ( + + + + ); + } +} diff --git a/packages/discord-components-core/src/components/discord-messages/readme.md b/packages/discord-components-core/src/components/discord-messages/readme.md new file mode 100644 index 0000000..a3aa240 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-messages/readme.md @@ -0,0 +1,15 @@ +# discord-messages + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| -------------- | --------------- | ----------------------------------------- | --------- | ----------- | +| `compactMode` | `compact-mode` | Whether to use compact mode or not. | `boolean` | `undefined` | +| `lightTheme` | `light-theme` | Whether to use light theme or not. | `boolean` | `undefined` | +| `noBackground` | `no-background` | Whether to exclude the background or not. | `boolean` | `undefined` | + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-quote/discord-quote.css b/packages/discord-components-core/src/components/discord-quote/discord-quote.css new file mode 100644 index 0000000..8380217 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-quote/discord-quote.css @@ -0,0 +1,22 @@ +.discord-message .discord-message-body .discord-quote-container { + display: flex; +} + +.discord-message .discord-message-body .discord-quote-container > .discord-quote-divider { + background-color: #4f545c; + border-radius: 4px; + font-size: 0.9em; + font-style: normal; + font-weight: 400; + margin: 0; + padding: 0; + width: 4px; +} + +.discord-message .discord-message-body blockquote { + margin-block-end: unset; + margin-block-start: unset; + margin-inline-end: unset; + margin-inline-start: unset; + padding: 0 8px 0 12px; +} diff --git a/packages/discord-components-core/src/components/discord-quote/discord-quote.tsx b/packages/discord-components-core/src/components/discord-quote/discord-quote.tsx new file mode 100644 index 0000000..93c3a79 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-quote/discord-quote.tsx @@ -0,0 +1,18 @@ +import { Component, h, Host } from '@stencil/core'; + +@Component({ + tag: 'discord-quote', + styleUrl: 'discord-quote.css' +}) +export class DiscordQuote { + public render() { + return ( + +
+
+ +
+
+ ); + } +} diff --git a/packages/discord-components-core/src/components/discord-quote/readme.md b/packages/discord-components-core/src/components/discord-quote/readme.md new file mode 100644 index 0000000..acc9e82 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-quote/readme.md @@ -0,0 +1,7 @@ +# discord-quote + + + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-reaction/discord-reaction.css b/packages/discord-components-core/src/components/discord-reaction/discord-reaction.css new file mode 100644 index 0000000..d455ac3 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-reaction/discord-reaction.css @@ -0,0 +1,71 @@ +.discord-reaction { + border-radius: 0.5rem; + cursor: pointer; + flex-shrink: 0; + margin-right: 0.25rem; + margin-bottom: 0.25rem; + user-select: none; + transition: none 0.1s ease; + transition-property: background-color, border-color; + background-color: #2f3136; + border: 1px solid transparent; +} + +.discord-light-theme .discord-reaction { + background-color: #f2f3f5; +} + +.discord-reaction:hover { + background-color: #36393f; + border-color: #fff2; +} + +.discord-light-theme .discord-reaction:not(.discord-reaction-reacted):hover { + background-color: white; + border-color: #0003; +} + +.discord-reaction.discord-reaction-reacted { + background-color: rgba(88, 101, 242, 0.15); + border-color: #5865f2; +} + +.discord-light-theme .discord-reaction.discord-reaction-reacted { + background-color: #e7e9fd; +} + +.discord-reaction .discord-reaction-inner { + display: flex; + align-items: center; + padding: 0.125rem 0.375rem; +} + +.discord-reaction img { + width: 1rem; + height: 1rem; + margin: 0.125rem 0; + min-width: auto; + min-height: auto; + object-fit: contain; + vertical-align: bottom; +} + +.discord-reaction .discord-reaction-count { + font-size: 0.875rem; + font-weight: 500; + margin-left: 0.375rem; + text-align: center; + color: #b9bbbe; +} + +.discord-light-theme .discord-reaction .discord-reaction-count { + color: #4f5660; +} + +.discord-reaction.discord-reaction-reacted .discord-reaction-count { + color: #dee0fc; +} + +.discord-light-theme .discord-reaction.discord-reaction-reacted .discord-reaction-count { + color: #5865f2; +} diff --git a/packages/discord-components-core/src/components/discord-reaction/discord-reaction.tsx b/packages/discord-components-core/src/components/discord-reaction/discord-reaction.tsx new file mode 100644 index 0000000..49afd83 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-reaction/discord-reaction.tsx @@ -0,0 +1,76 @@ +import { Component, ComponentInterface, Element, h, Prop } from '@stencil/core'; +import clsx from 'clsx'; + +@Component({ + tag: 'discord-reaction', + styleUrl: 'discord-reaction.css' +}) +export class DiscordReaction implements ComponentInterface { + /** + * The DiscordReaction element. + */ + @Element() + public el: HTMLElement; + + /** + * The reaction emoji image URL. + */ + @Prop() + public emoji: string; + + /** + * The name of the emoji to use as alternative image text. + * @default ':emoji' + */ + @Prop() + public name = ':emoji:'; + + /** + * The number of people who reacted. + * @default 1 + */ + @Prop({ mutable: true }) + public count = 1; + + /** + * Whether the reaction should show as reacted by the user. + * @default false + */ + @Prop() + public reacted = false; + + /** + * Whether the reaction should be reactive. + * @remark When the reaction is interactive left clicking it will add 1 to the counter. + * Whereas when holding the Shift key and left clicking it will decrease the counter. + * The counter cannot go below 1. + * @default false + */ + @Prop() + public interactive = false; + + public render() { + return ( +
+
+ {this.name} + {this.count} +
+
+ ); + } + + private handleReactionClick(event: MouseEvent) { + if (this.interactive) { + if (event.shiftKey) { + this.count--; + } else { + this.count++; + } + + if (this.count <= 0) { + this.count = 1; + } + } + } +} diff --git a/packages/discord-components-core/src/components/discord-reaction/readme.md b/packages/discord-components-core/src/components/discord-reaction/readme.md new file mode 100644 index 0000000..bb4cdd3 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-reaction/readme.md @@ -0,0 +1,17 @@ +# discord-reaction + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| ------------- | ------------- | -------------------------------------------------------- | --------- | ----------- | +| `count` | `count` | The number of people who reacted. | `number` | `1` | +| `emoji` | `emoji` | The reaction emoji image URL. | `string` | `undefined` | +| `interactive` | `interactive` | Whether the reaction should be reactive. | `boolean` | `false` | +| `name` | `name` | The name of the emoji to use as alternative image text. | `string` | `':emoji:'` | +| `reacted` | `reacted` | Whether the reaction should show as reacted by the user. | `boolean` | `false` | + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-reactions/discord-reactions.css b/packages/discord-components-core/src/components/discord-reactions/discord-reactions.css new file mode 100644 index 0000000..266b977 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-reactions/discord-reactions.css @@ -0,0 +1,9 @@ +.discord-message .discord-reactions, +.discord-system-message .discord-reactions { + display: flex; + -webkit-box-flex: 1; + -ms-flex: 1 0 auto; + flex: 1 0 auto; + align-items: center; + flex-wrap: wrap; +} diff --git a/packages/discord-components-core/src/components/discord-reactions/discord-reactions.tsx b/packages/discord-components-core/src/components/discord-reactions/discord-reactions.tsx new file mode 100644 index 0000000..1475a2e --- /dev/null +++ b/packages/discord-components-core/src/components/discord-reactions/discord-reactions.tsx @@ -0,0 +1,15 @@ +import { Component, ComponentInterface, h, Host } from '@stencil/core'; + +@Component({ + tag: 'discord-reactions', + styleUrl: 'discord-reactions.css' +}) +export class DiscordReactions implements ComponentInterface { + public render() { + return ( + + + + ); + } +} diff --git a/packages/discord-components-core/src/components/discord-reactions/readme.md b/packages/discord-components-core/src/components/discord-reactions/readme.md new file mode 100644 index 0000000..68f088e --- /dev/null +++ b/packages/discord-components-core/src/components/discord-reactions/readme.md @@ -0,0 +1,7 @@ +# discord-reactions + + + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-reply/discord-reply.css b/packages/discord-components-core/src/components/discord-reply/discord-reply.css new file mode 100644 index 0000000..70a0b7f --- /dev/null +++ b/packages/discord-components-core/src/components/discord-reply/discord-reply.css @@ -0,0 +1,146 @@ +.discord-replied-message { + color: #b9bbbe; + display: flex; + font-size: 0.875rem; + font-family: Whitney, 'Source Sans Pro', ui-sans-serif, system-ui, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', Arial, + sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + + padding-top: 2px; + margin-left: 56px; + margin-bottom: 4px; + align-items: center; + line-height: 1.125rem; + position: relative; + white-space: pre; + user-select: none; +} + +.discord-light-theme .discord-replied-message { + color: #4f5660; +} + +.discord-compact-mode .discord-replied-message { + margin-left: 62px; + margin-bottom: 0; +} + +.discord-replied-message:before { + content: ''; + display: block; + position: absolute; + top: 50%; + right: 100%; + bottom: 0; + left: -36px; + margin-right: 4px; + margin-top: -1px; + margin-left: -1px; + margin-bottom: -2px; + border-left: 2px solid #4f545c; + border-bottom: 0 solid #4f545c; + border-right: 0 solid #4f545c; + border-top: 2px solid #4f545c; + border-top-left-radius: 6px; +} + +.discord-light-theme .discord-replied-message:before { + border-color: #747f8d; +} + +.discord-replied-message .discord-replied-message-avatar, +.discord-replied-message .discord-reply-badge { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 16px; + height: 16px; + border-radius: 50%; + user-select: none; + margin-right: 0.25rem; +} + +.discord-replied-message .discord-reply-badge { + display: flex; + align-items: center; + justify-content: center; + color: #b9bbbe; + background: #202225; +} + +.discord-light-theme .discord-replied-message .discord-reply-badge { + color: #4f5660; + background: #e3e5e8; +} + +.discord-replied-message .discord-application-tag { + background-color: hsl(235, 85.6%, 64.7%); + color: #fff; + font-size: 0.625rem; + margin-right: 0.25rem; + line-height: 100%; + text-transform: uppercase; + /* Use flex layout to ensure both verified icon and "BOT" text are aligned to center */ + display: flex; + align-items: center; + /* Styling taken through Inspect Element on Discord client for Windows */ + height: 0.9375rem; + padding: 0 0.275rem; + margin-top: 0.075em; + border-radius: 0.1875rem; +} + +.discord-replied-message .discord-application-tag .discord-application-tag-verified { + width: 0.9375rem; + height: 0.9375rem; + margin-left: -0.1rem; +} + +.discord-replied-message .discord-application-tag.discord-application-tag-op { + background-color: #c9cdfb; + color: #4752c4; + border-radius: 0.4rem; +} + +.discord-replied-message .discord-replied-message-username { + flex-shrink: 0; + font-size: inherit; + line-height: inherit; + margin-right: 0.25rem; + opacity: 0.64; + font-weight: 500; + color: #fff; +} + +.discord-replied-message .discord-replied-message-content { + color: inherit; + font-size: inherit; + line-height: inherit; + white-space: pre; + text-overflow: ellipsis; + user-select: none; + cursor: pointer; + overflow-x: hidden; +} + +.discord-replied-message .discord-replied-message-content:hover { + color: #fff; +} + +.discord-light-theme .discord-replied-message .discord-replied-message-content:hover { + color: #000; +} + +.discord-replied-message .discord-replied-message-content .discord-message-edited { + margin-left: 0.25rem; +} + +.discord-replied-message .discord-replied-message-content-icon { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 20px; + height: 20px; + margin-left: 4px; +} + +@import '../author-info/author-info.css'; diff --git a/packages/discord-components-core/src/components/discord-reply/discord-reply.tsx b/packages/discord-components-core/src/components/discord-reply/discord-reply.tsx new file mode 100644 index 0000000..bb0f545 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-reply/discord-reply.tsx @@ -0,0 +1,155 @@ +import { Component, ComponentInterface, Element, h, Host, Prop } from '@stencil/core'; +import Fragment from '../../Fragment'; +import { avatars, Profile, profiles } from '../../options'; +import AttachmentReply from '../svgs/attachment-reply'; +import CommandReply from '../svgs/command-reply'; +import ReplyIcon from '../svgs/reply-icon'; +import VerifiedTick from '../svgs/verified-tick'; + +@Component({ + tag: 'discord-reply', + styleUrl: 'discord-reply.css' +}) +export class DiscordReply implements ComponentInterface { + /** + * The DiscordReply element. + */ + @Element() + public el: HTMLElement; + + /** + * The id of the profile data to use. + */ + @Prop() + public profile: string; + + /** + * The message author's username. + * @default 'User' + */ + @Prop() + public author = 'User'; + + /** + * The message author's avatar. Can be an avatar shortcut, relative path, or external link. + */ + @Prop() + public avatar: string; + + /** + * Whether the message author is a bot or not. + * Only works if `server` is `false` or `undefined`. + */ + @Prop() + public bot = false; + + /** + * Whether the message author is a server crosspost webhook or not. + * Only works if `bot` is `false` or `undefined`. + */ + @Prop() + public server = false; + + /** + * Whether the author is the original poster. + */ + @Prop() + public op = false; + + /** + * Whether the bot is verified or not. + * Only works if `bot` is `true` + */ + @Prop() + public verified = false; + + /** + * Whether the message has been edited or not. + */ + @Prop() + public edited = false; + + /** + * The message author's primary role color. Can be any [CSS color value](https://www.w3schools.com/cssref/css_colors_legal.asp). + */ + @Prop() + public roleColor: string; + + /** + * Whether the referenced message is from a response of a slash command. + */ + @Prop() + public command = false; + + /** + * Whether the referenced message contains attachments. + */ + @Prop() + public attachment = false; + + /** + * Whether this reply pings the original message sender, prepending an "@" on the author's username. + */ + @Prop() + public mentions = false; + + public render() { + const parent: HTMLDiscordMessageElement = this.el.parentElement as HTMLDiscordMessageElement; + + if (parent.tagName.toLowerCase() !== 'discord-message') { + throw new Error('All components must be direct children of .'); + } + + const resolveAvatar = (avatar: string): string => avatars[avatar] ?? avatar ?? avatars.default; + + const defaultData: Profile = { + author: this.author, + bot: this.bot, + verified: this.verified, + op: this.op, + server: this.server, + roleColor: this.roleColor + }; + const profileData: Profile = Reflect.get(profiles, this.profile) ?? {}; + const profile: Profile = { ...defaultData, ...profileData, ...{ avatar: resolveAvatar(profileData.avatar ?? this.avatar) } }; + + const messageParent: HTMLDiscordMessagesElement = parent.parentElement as HTMLDiscordMessagesElement; + + return ( + + {messageParent.compactMode ? ( +
+ +
+ ) : ( + {profile.author} + )} + { + + {profile.bot && !profile.server && ( + + {profile.verified && } + Bot + + )} + {profile.server && !profile.bot && Server} + {profile.op && OP} + + } + + {this.mentions && '@'} + {profile.author} + +
+ + {this.edited ? (edited) : ''} +
+ {this.command ? ( + + ) : ( + this.attachment && + )} +
+ ); + } +} diff --git a/packages/discord-components-core/src/components/discord-reply/readme.md b/packages/discord-components-core/src/components/discord-reply/readme.md new file mode 100644 index 0000000..cfd61d1 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-reply/readme.md @@ -0,0 +1,24 @@ +# discord-reply + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| ------------ | ------------ | ----------------------------------------------------------------------------------------------------------------------------- | --------- | ----------- | +| `attachment` | `attachment` | Whether the referenced message contains attachments. | `boolean` | `false` | +| `author` | `author` | The message author's username. | `string` | `'User'` | +| `avatar` | `avatar` | The message author's avatar. Can be an avatar shortcut, relative path, or external link. | `string` | `undefined` | +| `bot` | `bot` | Whether the message author is a bot or not. Only works if `server` is `false` or `undefined`. | `boolean` | `false` | +| `command` | `command` | Whether the referenced message is from a response of a slash command. | `boolean` | `false` | +| `edited` | `edited` | Whether the message has been edited or not. | `boolean` | `false` | +| `mentions` | `mentions` | Whether this reply pings the original message sender, prepending an "@" on the author's username. | `boolean` | `false` | +| `op` | `op` | Whether the author is the original poster. | `boolean` | `false` | +| `profile` | `profile` | The id of the profile data to use. | `string` | `undefined` | +| `roleColor` | `role-color` | The message author's primary role color. Can be any [CSS color value](https://www.w3schools.com/cssref/css_colors_legal.asp). | `string` | `undefined` | +| `server` | `server` | Whether the message author is a server crosspost webhook or not. Only works if `bot` is `false` or `undefined`. | `boolean` | `false` | +| `verified` | `verified` | Whether the bot is verified or not. Only works if `bot` is `true` | `boolean` | `false` | + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-spoiler/discord-spoiler.css b/packages/discord-components-core/src/components/discord-spoiler/discord-spoiler.css new file mode 100644 index 0000000..6e60713 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-spoiler/discord-spoiler.css @@ -0,0 +1,26 @@ +.discord-message .discord-message-body .discord-spoiler { + background-color: #202225; + color: transparent; + cursor: pointer; +} + +.discord-light-theme .discord-message .discord-message-body .discord-spoiler { + background-color: #b9bbbe; +} + +.discord-message .discord-message-body .discord-spoiler:hover { + background-color: rgba(32, 34, 37, 0.8); +} + +.discord-light-theme .discord-message .discord-message-body .discord-spoiler:hover { + background-color: rgba(185, 187, 190, 0.8); +} + +.discord-message .discord-message-body .discord-spoiler--revealed { + color: inherit; + background-color: hsla(0, 0%, 100%, 0.1); +} + +.discord-light-theme .discord-message .discord-message-body .discord-spoiler--revealed { + background-color: rgba(0, 0, 0, 0.1); +} diff --git a/packages/discord-components-core/src/components/discord-spoiler/discord-spoiler.tsx b/packages/discord-components-core/src/components/discord-spoiler/discord-spoiler.tsx new file mode 100644 index 0000000..e23a9ab --- /dev/null +++ b/packages/discord-components-core/src/components/discord-spoiler/discord-spoiler.tsx @@ -0,0 +1,22 @@ +import { Component, h, Host, Listen, State } from '@stencil/core'; + +@Component({ + tag: 'discord-spoiler', + styleUrl: 'discord-spoiler.css' +}) +export class DiscordSpoiler { + @State() private isRevealed = false; + + @Listen('click') + public reveal() { + this.isRevealed = true; + } + + public render() { + return ( + + + + ); + } +} diff --git a/packages/discord-components-core/src/components/discord-spoiler/readme.md b/packages/discord-components-core/src/components/discord-spoiler/readme.md new file mode 100644 index 0000000..b0d2bbd --- /dev/null +++ b/packages/discord-components-core/src/components/discord-spoiler/readme.md @@ -0,0 +1,7 @@ +# discord-spoiler + + + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-system-message/discord-system-message.css b/packages/discord-components-core/src/components/discord-system-message/discord-system-message.css new file mode 100644 index 0000000..417547d --- /dev/null +++ b/packages/discord-components-core/src/components/discord-system-message/discord-system-message.css @@ -0,0 +1,140 @@ +.discord-system-message { + color: #8e9297; + display: flex; + font-weight: 400; + font-size: 1rem; + font-family: Whitney, 'Source Sans Pro', ui-sans-serif, system-ui, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', Arial, + sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + padding: 0px 1em; + + position: relative; + word-wrap: break-word; + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + padding-right: 0; + min-height: 1.375rem; + padding-right: 48px !important; + margin-top: 1.0625rem; +} + +.discord-light-theme .discord-system-message { + color: #2e3338; + border-color: #eceeef; +} + +.discord-system-message.discord-channel-name-change { + color: #fff; +} + +.discord-light-theme .discord-system-message.discord-channel-name-change { + color: #060607; +} + +.discord-system-message.discord-boost-system-message svg { + color: #ff73fa; +} + +.discord-system-message.discord-alert-system-message svg { + color: #faa81a; +} + +.discord-system-message.discord-error-system-message svg { + color: #faa81a; +} + +.discord-system-message:first-child { + margin-top: 0.5rem; +} + +.discord-system-message:last-child { + margin-bottom: 0.5rem; + border-bottom-width: 0; +} + +.discord-system-message .discord-message-icon { + margin-right: 16px; + margin-top: 5px; + min-width: 40px; + display: flex; + align-items: flex-start; + justify-content: center; +} + +.discord-system-message .discord-message-icon svg { + width: 16px; + height: 16px; +} + +.discord-system-message .discord-message-timestamp { + color: #72767d; + font-size: 12px; + margin-left: 3px; +} + +.discord-light-theme .discord-system-message .discord-message-timestamp { + color: #747f8d; +} + +.discord-system-message .discord-message-system-edited { + color: #72767d; + font-size: 10px; +} + +.discord-light-theme .discord-system-message .discord-message-edited { + color: #99aab5; +} + +.discord-system-message .discord-message-content { + width: 100%; + line-height: 160%; + font-weight: normal; + padding-top: 2px; + display: flex; + flex-direction: column; +} + +.discord-system-message .discord-message-content i { + font-style: normal; + cursor: pointer; + color: white; + font-weight: 500; +} + +.discord-light-theme .discord-system-message .discord-message-content i { + color: #060607; +} + +.discord-system-message .discord-message-content i:hover { + text-decoration: underline; +} + +.discord-system-message:hover { + background-color: rgba(4, 4, 5, 0.07); +} + +.discord-light-theme .discord-system-message:hover { + background-color: rgba(6, 6, 7, 0.02); +} + +.discord-system-message.discord-system-message-has-thread:after { + width: 2rem; + left: 2.2rem; + top: 1.75rem; + border-left: 2px solid #4f545c; + border-bottom: 2px solid #4f545c; + border-bottom-left-radius: 8px; + bottom: 29px; + content: ''; + position: absolute; +} + +.discord-light-theme .discord-system-message.discord-system-message-has-thread:after { + border-color: #747f8d; +} + +@import '../author-info/author-info.css'; diff --git a/packages/discord-components-core/src/components/discord-system-message/discord-system-message.tsx b/packages/discord-components-core/src/components/discord-system-message/discord-system-message.tsx new file mode 100644 index 0000000..daee8cc --- /dev/null +++ b/packages/discord-components-core/src/components/discord-system-message/discord-system-message.tsx @@ -0,0 +1,132 @@ +import { Component, ComponentInterface, Element, h, Host, Prop, Watch } from '@stencil/core'; +import clsx from 'clsx'; +import { DiscordTimestamp, handleTimestamp } from '../../util'; +import Boost from '../svgs/boost'; +import DMCall from '../svgs/dm-call'; +import DMEdit from '../svgs/dm-edit'; +import DMMissedCall from '../svgs/dm-missed-call'; +import Pin from '../svgs/pin'; +import SystemAlert from '../svgs/system-alert'; +import SystemError from '../svgs/system-error'; +import Thread from '../svgs/thread'; +import UserJoin from '../svgs/user-join'; +import UserLeave from '../svgs/user-leave'; + +@Component({ + tag: 'discord-system-message', + styleUrl: 'discord-system-message.css' +}) +export class DiscordSystemMessage implements ComponentInterface { + /** + * The DiscordSystemMessage element. + */ + @Element() + public el: HTMLElement; + + /** + * The timestamp to use for the message date. + */ + @Prop({ mutable: true, reflect: true }) + public timestamp: DiscordTimestamp = new Date(); + + /** + * The type of system message this is, this will change the icon shown. + * Valid values: `join`, `leave`, `call`, `missed-call`, `boost`, `edit`, `thread`, `pin`, `alert`, and `error`. + */ + @Prop() + public type: 'join' | 'leave' | 'call' | 'missed-call' | 'boost' | 'edit' | 'thread' | 'pin' | 'alert' | 'error' = 'join'; + + /** + * Whether this message is to show channel name changes, used to match Discord's style. + */ + @Prop() + public channelName = false; + + @Watch('type') + public handleType(value: string) { + if (typeof value !== 'string') { + throw new TypeError('DiscordSystemMessage `type` prop must be a string.'); + } else if (!['join', 'leave', 'call', 'missed-call', 'boost', 'edit', 'thread', 'pin', 'alert', 'error'].includes(value)) { + throw new RangeError( + "DiscordSystemMessage `type` prop must be one of: 'join', 'leave', 'call', 'missed-call', 'boost', 'edit', 'pin', 'thread' 'alert', 'error'" + ); + } + } + + @Watch('timestamp') + public updateTimestamp(value: DiscordTimestamp): string | null { + return handleTimestamp(value); + } + + public componentWillRender() { + this.timestamp = handleTimestamp(this.timestamp); + } + + public render() { + const parent: HTMLDiscordMessagesElement = this.el.parentElement as HTMLDiscordMessagesElement; + + if (parent.tagName.toLowerCase() !== 'discord-messages') { + throw new Error('All components must be direct children of .'); + } + + let icon = ''; + + switch (this.type) { + case 'join': + icon = ; + break; + case 'leave': + icon = ; + break; + case 'call': + icon = ; + break; + case 'missed-call': + icon = ; + break; + case 'edit': + icon = ; + break; + case 'boost': + icon = ; + break; + case 'thread': + icon = ; + break; + case 'alert': + icon = ; + break; + case 'error': + icon = ; + break; + case 'pin': + icon = ; + break; + } + + const hasThread: boolean = + // @ts-expect-error ts doesn't understand this + Array.from(this.el.children).some((child: HTMLDiscordThreadElement): boolean => { + return child.tagName.toLowerCase() === 'discord-thread'; + }); + + return ( + +
{icon}
+
+ + + {this.timestamp} + + + +
+
+ ); + } +} diff --git a/packages/discord-components-core/src/components/discord-system-message/readme.md b/packages/discord-components-core/src/components/discord-system-message/readme.md new file mode 100644 index 0000000..33902ca --- /dev/null +++ b/packages/discord-components-core/src/components/discord-system-message/readme.md @@ -0,0 +1,15 @@ +# discord-system-message + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| ------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | ------------ | +| `channelName` | `channel-name` | Whether this message is to show channel name changes, used to match Discord's style. | `boolean` | `false` | +| `timestamp` | `timestamp` | The timestamp to use for the message date. | `Date \| null \| string` | `new Date()` | +| `type` | `type` | The type of system message this is, this will change the icon shown. Valid values: `join`, `leave`, `call`, `missed-call`, `boost`, `edit`, `thread`, `pin`, `alert`, and `error`. | `"alert" \| "boost" \| "call" \| "edit" \| "error" \| "join" \| "leave" \| "missed-call" \| "pin" \| "thread"` | `'join'` | + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-tenor-video/discord-tenor-video.css b/packages/discord-components-core/src/components/discord-tenor-video/discord-tenor-video.css new file mode 100644 index 0000000..92e2fa4 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-tenor-video/discord-tenor-video.css @@ -0,0 +1,34 @@ +.discord-tenor-video { + color: #dcddde; + display: flex; + font-size: 13px; + line-height: 150%; + margin-bottom: 8px; + margin-top: 8px; +} + +.discord-tenor-video .discord-tenor-video-wrapper { + display: block; + position: relative; + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; + overflow: hidden; + border-radius: 4px; +} + +.discord-tenor-video .discord-tenor-video-wrapper video { + -webkit-box-align: center; + -webkit-box-pack: center; + align-items: center; + border-radius: 0; + cursor: pointer; + display: flex; + height: 100%; + justify-content: center; + max-height: 100%; + width: 100%; + left: 0px; + top: 0px; +} diff --git a/packages/discord-components-core/src/components/discord-tenor-video/discord-tenor-video.tsx b/packages/discord-components-core/src/components/discord-tenor-video/discord-tenor-video.tsx new file mode 100644 index 0000000..fd86d0d --- /dev/null +++ b/packages/discord-components-core/src/components/discord-tenor-video/discord-tenor-video.tsx @@ -0,0 +1,41 @@ +import { Component, ComponentInterface, Element, h, Host, Prop } from '@stencil/core'; + +@Component({ + tag: 'discord-tenor-video', + styleUrl: 'discord-tenor-video.css' +}) +export class DiscordTenorVideo implements ComponentInterface { + /** + * The DiscordTenorVideo element. + */ + @Element() + public el: HTMLElement; + + /** + * The URL for the video + */ + @Prop() + public url: string; + + /** + * The height of the video in pixels + */ + @Prop() + public height: number; + + /** + * The width of the video in pixels + */ + @Prop() + public width: number; + + public render() { + return ( + +
+ +
+
+ ); + } +} diff --git a/packages/discord-components-core/src/components/discord-tenor-video/readme.md b/packages/discord-components-core/src/components/discord-tenor-video/readme.md new file mode 100644 index 0000000..ac3e7b5 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-tenor-video/readme.md @@ -0,0 +1,15 @@ +# discord-attachment + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| -------- | --------- | --------------------------------- | -------- | ----------- | +| `height` | `height` | The height of the video in pixels | `number` | `undefined` | +| `url` | `url` | The URL for the video | `string` | `undefined` | +| `width` | `width` | The width of the video in pixels | `number` | `undefined` | + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-thread-message/discord-thread-message.css b/packages/discord-components-core/src/components/discord-thread-message/discord-thread-message.css new file mode 100644 index 0000000..7b82430 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-thread-message/discord-thread-message.css @@ -0,0 +1,81 @@ +.discord-thread-message { + height: 18px; + min-width: 0; + display: flex; + align-items: center; + font-size: 0.875rem; + line-height: 1.125rem; +} + +.discord-thread-message .discord-thread-message-avatar { + margin-right: 8px; + flex: 0 0 auto; + width: 16px; + height: 16px; + border-radius: 50%; + user-select: none; +} + +.discord-thread-message .discord-thread-message-username { + flex-shrink: 0; + font-size: inherit; + line-height: inherit; + margin-right: 0.25rem; + opacity: 0.64; + color: white; + display: inline; + vertical-align: baseline; + position: relative; + overflow: hidden; +} + +.discord-light-theme .discord-thread-message .discord-thread-message-username { + color: #060607; +} + +.discord-thread-message .discord-application-tag { + background-color: #5865f2; + color: #fff; + font-size: 0.65em; + margin-right: 5px; + border-radius: 3px; + line-height: 100%; + text-transform: uppercase; + display: flex; + align-items: center; + height: 0.9375rem; + padding: 0 0.275rem; + margin-top: 0.075em; + border-radius: 0.1875rem; +} + +.discord-thread-message .discord-application-tag-verified { + display: inline-block; + width: 0.9375rem; + height: 0.9375rem; + margin-left: -0.25rem; +} + +.discord-thread-message .discord-thread-message-content { + display: flex; + align-items: baseline; +} + +.discord-thread-message .discord-message-edited { + color: #72767d; + font-size: 10px; + margin-left: 5px; +} + +.discord-thread-message .discord-thread-message-timestamp { + color: #72767d; + flex-shrink: 0; + margin-left: 8px; + font-size: 0.875rem; + line-height: 1.125rem; +} + +.discord-light-theme .discord-thread-message .discord-thread-message-timestamp, +.discord-light-theme .discord-thread-message .discord-message-edited { + color: #747f8d; +} diff --git a/packages/discord-components-core/src/components/discord-thread-message/discord-thread-message.tsx b/packages/discord-components-core/src/components/discord-thread-message/discord-thread-message.tsx new file mode 100644 index 0000000..c85170d --- /dev/null +++ b/packages/discord-components-core/src/components/discord-thread-message/discord-thread-message.tsx @@ -0,0 +1,105 @@ +import { Component, ComponentInterface, Element, h, Host, Prop } from '@stencil/core'; +import Fragment from '../../Fragment'; +import { avatars, Profile, profiles } from '../../options'; +import VerifiedTick from '../svgs/verified-tick'; + +@Component({ + tag: 'discord-thread-message', + styleUrl: 'discord-thread-message.css' +}) +export class DiscordThreadMessage implements ComponentInterface { + /** + * The DiscordThreadMessage element. + */ + @Element() + public el: HTMLElement; + + /** + * The id of the profile data to use. + */ + @Prop() + public profile: string; + + /** + * The message author's username. + * @default 'User' + */ + @Prop() + public author = 'User'; + + /** + * The message author's avatar. Can be an avatar shortcut, relative path, or external link. + */ + @Prop() + public avatar: string; + + /** + * Whether the message author is a bot or not. + * Only works if `server` is `false` or `undefined`. + */ + @Prop() + public bot = false; + + /** + * Whether the message author is a server crosspost webhook or not. + * Only works if `bot` is `false` or `undefined`. + */ + @Prop() + public server = false; + + /** + * Whether the bot is verified or not. + * Only works if `bot` is `true` + */ + @Prop() + public verified = false; + + /** + * Whether the message has been edited or not. + */ + @Prop() + public edited = false; + + /** + * The message author's primary role color. Can be any [CSS color value](https://www.w3schools.com/cssref/css_colors_legal.asp). + */ + @Prop() + public roleColor: string; + + /** + * The relative timestamp of the message. + */ + @Prop() + public relativeTimestamp = '1m ago'; + + public render() { + const resolveAvatar = (avatar: string): string => avatars[avatar] ?? avatar ?? avatars.default; + + const defaultData: Profile = { author: this.author, bot: this.bot, verified: this.verified, server: this.server, roleColor: this.roleColor }; + const profileData: Profile = Reflect.get(profiles, this.profile) ?? {}; + const profile: Profile = { ...defaultData, ...profileData, ...{ avatar: resolveAvatar(profileData.avatar ?? this.avatar) } }; + + return ( + + {profile.author} + + {profile.bot && !profile.server && ( + + {profile.verified && } + Bot + + )} + {profile.server && !profile.bot && Server} + + + {profile.author} + +
+ + {this.edited ? (edited) : ''} +
+ {this.relativeTimestamp} +
+ ); + } +} diff --git a/packages/discord-components-core/src/components/discord-thread-message/readme.md b/packages/discord-components-core/src/components/discord-thread-message/readme.md new file mode 100644 index 0000000..c7a0063 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-thread-message/readme.md @@ -0,0 +1,21 @@ +# discord-thread-message + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| ------------------- | -------------------- | ----------------------------------------------------------------------------------------------------------------------------- | --------- | ----------- | +| `author` | `author` | The message author's username. | `string` | `'User'` | +| `avatar` | `avatar` | The message author's avatar. Can be an avatar shortcut, relative path, or external link. | `string` | `undefined` | +| `bot` | `bot` | Whether the message author is a bot or not. Only works if `server` is `false` or `undefined`. | `boolean` | `false` | +| `edited` | `edited` | Whether the message has been edited or not. | `boolean` | `false` | +| `profile` | `profile` | The id of the profile data to use. | `string` | `undefined` | +| `relativeTimestamp` | `relative-timestamp` | The relative timestamp of the message. | `string` | `'1m ago'` | +| `roleColor` | `role-color` | The message author's primary role color. Can be any [CSS color value](https://www.w3schools.com/cssref/css_colors_legal.asp). | `string` | `undefined` | +| `server` | `server` | Whether the message author is a server crosspost webhook or not. Only works if `bot` is `false` or `undefined`. | `boolean` | `false` | +| `verified` | `verified` | Whether the bot is verified or not. Only works if `bot` is `true` | `boolean` | `false` | + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-thread/discord-thread.css b/packages/discord-components-core/src/components/discord-thread/discord-thread.css new file mode 100644 index 0000000..cf99f81 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-thread/discord-thread.css @@ -0,0 +1,61 @@ +.discord-thread { + background-color: #2f3136; + border-radius: 4px; + cursor: pointer; + margin-top: 8px; + max-width: 480px; + min-width: 0; + padding: 8px; + display: inline-flex; + width: fit-content; + flex-direction: column; +} + +.discord-light-theme .discord-thread { + background-color: #f2f3f5; +} + +.discord-thread .discord-thread-top { + display: flex; +} + +.discord-thread .discord-thread-bottom { + font-size: 0.875rem; + line-height: 1.125rem; + align-items: center; + color: #b9bbbe; + display: flex; + margin-top: 2px; + white-space: nowrap; +} + +.discord-light-theme .discord-thread-bottom { + color: #4f5660; +} + +.discord-thread .discord-thread-name { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.125rem; + color: white; + margin-right: 8px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.discord-light-theme .discord-thread-name { + color: #060607; +} + +.discord-thread .discord-thread-cta { + color: #00aff4; + flex-shrink: 0; + font-size: 0.875rem; + font-weight: 600; + line-height: 1.125rem; +} + +.discord-thread:hover .discord-thread-cta { + text-decoration: underline; +} diff --git a/packages/discord-components-core/src/components/discord-thread/discord-thread.tsx b/packages/discord-components-core/src/components/discord-thread/discord-thread.tsx new file mode 100644 index 0000000..1a32cd0 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-thread/discord-thread.tsx @@ -0,0 +1,41 @@ +import { Component, ComponentInterface, Element, h, Host, Prop } from '@stencil/core'; + +@Component({ + tag: 'discord-thread', + styleUrl: 'discord-thread.css' +}) +export class DiscordThread implements ComponentInterface { + /** + * The DiscordThread element. + */ + @Element() + public el: HTMLElement; + + /** + * The name of the thread. + */ + @Prop() + public name = 'Thread'; + + /** + * The the text within the call to action text. (i.e. 'See Thread' or 'x Messages') + */ + @Prop() + public cta = 'See Thread'; + + public render() { + return ( + +
+ {this.name} + +
+ + + +
+ ); + } +} diff --git a/packages/discord-components-core/src/components/discord-thread/readme.md b/packages/discord-components-core/src/components/discord-thread/readme.md new file mode 100644 index 0000000..d1e6f69 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-thread/readme.md @@ -0,0 +1,14 @@ +# discord-thread + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| -------- | --------- | -------------------------------------------------------------------------------- | -------- | -------------- | +| `cta` | `cta` | The the text within the call to action text. (i.e. 'See Thread' or 'x Messages') | `string` | `'See Thread'` | +| `name` | `name` | The name of the thread. | `string` | `'Thread'` | + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-time/discord-time.css b/packages/discord-components-core/src/components/discord-time/discord-time.css new file mode 100644 index 0000000..f5d2ab2 --- /dev/null +++ b/packages/discord-components-core/src/components/discord-time/discord-time.css @@ -0,0 +1,5 @@ +.discord-time { + background-color: #ffffff0f; + border-radius: 3px; + padding: 0 2px; +} diff --git a/packages/discord-components-core/src/components/discord-time/discord-time.tsx b/packages/discord-components-core/src/components/discord-time/discord-time.tsx new file mode 100644 index 0000000..0ca809b --- /dev/null +++ b/packages/discord-components-core/src/components/discord-time/discord-time.tsx @@ -0,0 +1,97 @@ +import { Component, h, Host, Prop, State } from '@stencil/core'; + +const DATE_TYPE_FORMATS = { + t: { timeStyle: 'short' }, + T: { timeStyle: 'medium' }, + d: { dateStyle: 'short' }, + D: { dateStyle: 'long' }, + f: { dateStyle: 'long', timeStyle: 'short' }, + F: { dateStyle: 'full', timeStyle: 'short' }, + R: { style: 'long', numeric: 'auto' } +} as const; + +// max: [unit, per unit] +const RELATIVE_DATE_CONVERSION = { + 60000: ['second', 1000], + 3600000: ['minute', 60000], + 86400000: ['hour', 3600000], + 604800000: ['day', 86400000], + 2419200000: ['week', 604800000], + 29030400000: ['month', 2419200000], + 290304000000: ['year', 29030400000] +} as const; + +@Component({ + tag: 'discord-time', + styleUrl: 'discord-time.css' +}) +export class DiscordTime { + /** + * The time to display. + */ + @Prop() + public timestamp: number; + + /** + * The format for the time. + */ + @Prop() + public format: 't' | 'T' | 'f' | 'F' | 'd' | 'D' | 'R' = 't'; + + // Private variables + @State() private time = ''; + private updateInterval: number | undefined; + + public render() { + return {this.time}; + } + + // Lifecycle methods + public connectedCallback() { + this.update(); + } + + public disconnectedCallback() { + window.clearInterval(this.updateInterval); + } + + /** + * Generates a string for the time. + */ + private update() { + const date = new Date(this.timestamp); + + if (this.format === 'R') { + const [formatted, interval] = getRelativeDate(date); + this.time = formatted; + + // Update the time according to the interval + if (this.updateInterval) window.clearInterval(this.updateInterval); + if (interval > -1) this.updateInterval = window.setInterval(() => this.update(), interval); + } else { + this.time = date.toLocaleString(undefined, DATE_TYPE_FORMATS[this.format]); + } + } +} + +// [formatted, updateInterval] +function getRelativeDate(date: Date): [string, number] { + const difference = Date.now() - date.getTime(); + const diffAbsolute = Math.abs(difference); + + const ending = difference < 0 ? 'from now' : 'ago'; + + if (diffAbsolute < 5000) { + return ['Just now', 1000]; + } + + for (const [time, [unit, per]] of Object.entries(RELATIVE_DATE_CONVERSION)) { + if (diffAbsolute < Number(time)) { + const amount = Math.round(diffAbsolute / per); + + return [`${amount} ${unit}${amount === 1 ? '' : 's'} ${ending}`, unit === 'second' ? 1000 : 60 * 1000]; + } + } + + return [`${Math.floor(diffAbsolute / 290304000000)} years ${ending}`, -1]; +} diff --git a/packages/discord-components-core/src/components/discord-time/readme.md b/packages/discord-components-core/src/components/discord-time/readme.md new file mode 100644 index 0000000..29a72fd --- /dev/null +++ b/packages/discord-components-core/src/components/discord-time/readme.md @@ -0,0 +1,14 @@ +# discord-time + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| ----------- | ----------- | ------------------------ | ----------------------------------------------- | ----------- | +| `format` | `format` | The format for the time. | `"D" \| "F" \| "R" \| "T" \| "d" \| "f" \| "t"` | `'t'` | +| `timestamp` | `timestamp` | The time to display. | `number` | `undefined` | + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/discord-underlined/discord-underlined.tsx b/packages/discord-components-core/src/components/discord-underlined/discord-underlined.tsx new file mode 100644 index 0000000..421db7d --- /dev/null +++ b/packages/discord-components-core/src/components/discord-underlined/discord-underlined.tsx @@ -0,0 +1,14 @@ +import { Component, h } from '@stencil/core'; + +@Component({ + tag: 'discord-underlined' +}) +export class DiscordUnderlined { + public render() { + return ( + + + + ); + } +} diff --git a/packages/discord-components-core/src/components/discord-underlined/readme.md b/packages/discord-components-core/src/components/discord-underlined/readme.md new file mode 100644 index 0000000..833322d --- /dev/null +++ b/packages/discord-components-core/src/components/discord-underlined/readme.md @@ -0,0 +1,7 @@ +# discord-underlined + + + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/discord-components-core/src/components/svgs/attachment-reply.tsx b/packages/discord-components-core/src/components/svgs/attachment-reply.tsx new file mode 100644 index 0000000..b73aeec --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/attachment-reply.tsx @@ -0,0 +1,12 @@ +import { h } from '@stencil/core'; + +export default function AttachmentReply(props: T) { + return ( + + + + ); +} diff --git a/packages/discord-components-core/src/components/svgs/boost.tsx b/packages/discord-components-core/src/components/svgs/boost.tsx new file mode 100644 index 0000000..a1f70de --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/boost.tsx @@ -0,0 +1,10 @@ +import { h } from '@stencil/core'; + +export default function Boost(props: T) { + return ( + + + + + ); +} diff --git a/packages/discord-components-core/src/components/svgs/channel-forum.tsx b/packages/discord-components-core/src/components/svgs/channel-forum.tsx new file mode 100644 index 0000000..0c69893 --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/channel-forum.tsx @@ -0,0 +1,14 @@ +import { h } from '@stencil/core'; + +export default function ChannelForum(props: T) { + return ( + + + + ); +} diff --git a/packages/discord-components-core/src/components/svgs/channel-icon.tsx b/packages/discord-components-core/src/components/svgs/channel-icon.tsx new file mode 100644 index 0000000..5705aa9 --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/channel-icon.tsx @@ -0,0 +1,14 @@ +import { h } from '@stencil/core'; + +export default function ChannelIcon(props: T) { + return ( + + + + ); +} diff --git a/packages/discord-components-core/src/components/svgs/channel-thread.tsx b/packages/discord-components-core/src/components/svgs/channel-thread.tsx new file mode 100644 index 0000000..ac31b46 --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/channel-thread.tsx @@ -0,0 +1,16 @@ +import { h } from '@stencil/core'; + +export default function ChannelThread(props: T) { + return ( + + + + + ); +} diff --git a/packages/discord-components-core/src/components/svgs/command-icon.tsx b/packages/discord-components-core/src/components/svgs/command-icon.tsx new file mode 100644 index 0000000..12413e1 --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/command-icon.tsx @@ -0,0 +1,9 @@ +import { h } from '@stencil/core'; + +export default function CommandIcon(props: T) { + return ( + + + + ); +} diff --git a/packages/discord-components-core/src/components/svgs/command-reply.tsx b/packages/discord-components-core/src/components/svgs/command-reply.tsx new file mode 100644 index 0000000..6f12486 --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/command-reply.tsx @@ -0,0 +1,14 @@ +import { h } from '@stencil/core'; + +export default function CommandReply(props: T) { + return ( + + + + ); +} diff --git a/packages/discord-components-core/src/components/svgs/dm-call.tsx b/packages/discord-components-core/src/components/svgs/dm-call.tsx new file mode 100644 index 0000000..9f9ed3f --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/dm-call.tsx @@ -0,0 +1,13 @@ +import { h } from '@stencil/core'; + +export default function DMCall(props: T) { + return ( + + + + ); +} diff --git a/packages/discord-components-core/src/components/svgs/dm-edit.tsx b/packages/discord-components-core/src/components/svgs/dm-edit.tsx new file mode 100644 index 0000000..d99a0b9 --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/dm-edit.tsx @@ -0,0 +1,15 @@ +import { h } from '@stencil/core'; + +export default function DMEdit(props: T) { + return ( + + + + + + + ); +} diff --git a/packages/discord-components-core/src/components/svgs/dm-missed-call.tsx b/packages/discord-components-core/src/components/svgs/dm-missed-call.tsx new file mode 100644 index 0000000..475aa0c --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/dm-missed-call.tsx @@ -0,0 +1,15 @@ +import { h } from '@stencil/core'; + +export default function DMMissedCall(props: T) { + return ( + + + + + + + ); +} diff --git a/packages/discord-components-core/src/components/svgs/ephemeral.tsx b/packages/discord-components-core/src/components/svgs/ephemeral.tsx new file mode 100644 index 0000000..2b54331 --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/ephemeral.tsx @@ -0,0 +1,16 @@ +import { h } from '@stencil/core'; + +export default function Ephemeral(props: T) { + return ( + + + + + ); +} diff --git a/packages/discord-components-core/src/components/svgs/guild-badge.tsx b/packages/discord-components-core/src/components/svgs/guild-badge.tsx new file mode 100644 index 0000000..4065b59 --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/guild-badge.tsx @@ -0,0 +1,13 @@ +import { h } from '@stencil/core'; + +export default function GuildBadge(props: T) { + return ( + + + + ); +} diff --git a/packages/discord-components-core/src/components/svgs/launch-icon.tsx b/packages/discord-components-core/src/components/svgs/launch-icon.tsx new file mode 100644 index 0000000..6fc6679 --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/launch-icon.tsx @@ -0,0 +1,13 @@ +import { h } from '@stencil/core'; + +export default function LaunchIcon(props: T) { + return ( + + + + + ); +} diff --git a/packages/discord-components-core/src/components/svgs/locked-voice-channel.tsx b/packages/discord-components-core/src/components/svgs/locked-voice-channel.tsx new file mode 100644 index 0000000..328f759 --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/locked-voice-channel.tsx @@ -0,0 +1,13 @@ +import { h } from '@stencil/core'; + +export default function LockedVoiceChannel(props: T) { + return ( + + + + ); +} diff --git a/packages/discord-components-core/src/components/svgs/partner-badge-overlay.tsx b/packages/discord-components-core/src/components/svgs/partner-badge-overlay.tsx new file mode 100644 index 0000000..b15db43 --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/partner-badge-overlay.tsx @@ -0,0 +1,16 @@ +import { h } from '@stencil/core'; + +const PartnerBadgeOverlay = () => ( + + + + +); + +export default PartnerBadgeOverlay; diff --git a/packages/discord-components-core/src/components/svgs/pin.tsx b/packages/discord-components-core/src/components/svgs/pin.tsx new file mode 100644 index 0000000..ffd1e6a --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/pin.tsx @@ -0,0 +1,12 @@ +import { h } from '@stencil/core'; + +export default function Pin(props: T) { + return ( + + + + ); +} diff --git a/packages/discord-components-core/src/components/svgs/reply-icon.tsx b/packages/discord-components-core/src/components/svgs/reply-icon.tsx new file mode 100644 index 0000000..83e3dfe --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/reply-icon.tsx @@ -0,0 +1,12 @@ +import { h } from '@stencil/core'; + +export default function ReplyIcon(props: T) { + return ( + + + + ); +} diff --git a/packages/discord-components-core/src/components/svgs/system-alert.tsx b/packages/discord-components-core/src/components/svgs/system-alert.tsx new file mode 100644 index 0000000..2b373a2 --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/system-alert.tsx @@ -0,0 +1,14 @@ +import { h } from '@stencil/core'; + +export default function SystemAlert(props: T) { + return ( + + + + ); +} diff --git a/packages/discord-components-core/src/components/svgs/system-error.tsx b/packages/discord-components-core/src/components/svgs/system-error.tsx new file mode 100644 index 0000000..d965c27 --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/system-error.tsx @@ -0,0 +1,13 @@ +import { h } from '@stencil/core'; + +export default function SystemError(props: T) { + return ( + + + + ); +} diff --git a/packages/discord-components-core/src/components/svgs/thread.tsx b/packages/discord-components-core/src/components/svgs/thread.tsx new file mode 100644 index 0000000..f0fc901 --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/thread.tsx @@ -0,0 +1,16 @@ +import { h } from '@stencil/core'; + +export default function Thread(props: T) { + return ( + + + + + ); +} diff --git a/packages/discord-components-core/src/components/svgs/user-join.tsx b/packages/discord-components-core/src/components/svgs/user-join.tsx new file mode 100644 index 0000000..2ef2f75 --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/user-join.tsx @@ -0,0 +1,12 @@ +import { h } from '@stencil/core'; + +export default function UserJoin(props: T) { + return ( + + + + + + + ); +} diff --git a/packages/discord-components-core/src/components/svgs/user-leave.tsx b/packages/discord-components-core/src/components/svgs/user-leave.tsx new file mode 100644 index 0000000..5ee706a --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/user-leave.tsx @@ -0,0 +1,12 @@ +import { h } from '@stencil/core'; + +export default function UserLeave(props: T) { + return ( + + + + + + + ); +} diff --git a/packages/discord-components-core/src/components/svgs/verified-badge-overlay.tsx b/packages/discord-components-core/src/components/svgs/verified-badge-overlay.tsx new file mode 100644 index 0000000..8a3c953 --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/verified-badge-overlay.tsx @@ -0,0 +1,9 @@ +import { h } from '@stencil/core'; + +const VerifiedBadgeOverlay = () => ( + + + +); + +export default VerifiedBadgeOverlay; diff --git a/packages/discord-components-core/src/components/svgs/verified-tick.tsx b/packages/discord-components-core/src/components/svgs/verified-tick.tsx new file mode 100644 index 0000000..e402871 --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/verified-tick.tsx @@ -0,0 +1,9 @@ +import { h } from '@stencil/core'; + +const VerifiedTick = () => ( + + + +); + +export default VerifiedTick; diff --git a/packages/discord-components-core/src/components/svgs/voice-channel.tsx b/packages/discord-components-core/src/components/svgs/voice-channel.tsx new file mode 100644 index 0000000..ecd6abc --- /dev/null +++ b/packages/discord-components-core/src/components/svgs/voice-channel.tsx @@ -0,0 +1,15 @@ +import { h } from '@stencil/core'; + +export default function VoiceChannel(props: T) { + return ( + + + + ); +} diff --git a/packages/discord-components-core/src/index.html b/packages/discord-components-core/src/index.html new file mode 100644 index 0000000..0d47f85 --- /dev/null +++ b/packages/discord-components-core/src/index.html @@ -0,0 +1,597 @@ + + + + + + Discord Components Core + + + + + + +
+
+

@skyra/discord-components-core

+ [Github] +
+
+

A normal conversation

+ + + test + + channel topic markdown will go here + Hey guys, I'm new here! Glad to be able to join you all! + + Hi, I'm new here too! + + + + Hey, Alyx Vargas and Dawn. Welcome to our server!
Be + sure to read through the rules. You can ping + Support + if you need help. +
+ Hello everyone! How's it going? + + Thank you + Maximillian Osborn! + + + I'm doing well, Willard Walton. What about yourself? + + s!8ball How am I doing today? + + Yes. + + + + + + asdf + + + + + + + + + + +
+

Light mode

+ + Look at me I'm a beautiful butterfly + Fluttering in the sunlight 🌞 + +

Compact mode

+ + Look at me I'm a beautiful butterfly + Fluttering in the moonlight 🌝 + Waiting for the day when + Compact mode would be turned on + Oh here it is! + +

Markdown Styling

+ + + I am bold text! + + + I am italic text! + + + + I am bold italic text! + + + + I am underlined text! + + + I am inline-code text! + + + I am spoiler text! + + + I am quoted text! + + +

No Background mode

+ + This message blends perfectly with your own background + No Background mode is turned on here + +

Mentions

+ + + Hey, Alyx Vargas and Dawn. Welcome to our server! Be + sure to read through the rules. You can ping + Support + if you need help. Feel free to join + General + and talk with us and post thoughts in feedback. + + + Hey there + Maximillian Osborn, thanks! I will! + + + Also, make sure to run profile to create your server profile! + + +

Custom Discord Emojis

+ + + Hey these are some custom emojis: + + + + Custom emojis in the embed description: + + + + Custom emojis in the field content + + + + + +

Server Invites

+ + + discord.gg/djs
+ discord.gg/code
+ discord.gg/6gakFR2 + + + + + +
+
+

Image Attachments with small images

+ + + That's a very small logo image! + + + +

Image Attachments with large images

+ + + Hey guys, check out this awesome, cute, and totally amazing dragon! + + + +

System Messages

+ + + Welcome, Snazzah. We hope you brought pizza. + + + + + + Snazzah has added Discord Developers #discord-api-announcements to this channel. Its most important updates will + show up here. + + Favna just boosted the server! + + Favna started a thread: Skyra Suggestion Thread. See all threads. + + + + Snazzah added Favna to the group. + Favna started a call that lasted an hour. + Snazzah changed the channel icon. + + Snazzah changed the channel name: A humble Group DM + + You missed a call from Favna that lasted a minute. + Favna left the group. + +

Threads

+ + + Favna started a thread: Skyra Suggestion Thread. See all threads. + + Pong! + + + + Let's make a thread! + There are no messages in this thread yet. + + +

Reactions

+ + + React to this message! + + + + + + + +

Replies

+ + + What do you think about this image? + Looks nice! + + + Looks nice! + I agree! + + +

Replies in Compact Mode

+ + + What do you think about this image? + Looks nice! + + + Looks nice! + I agree! + + +

Commands

+ + + + Pong! + + + Pong! + Took 100ms. + + +

Commands in Compact Mode

+ + + + Pong! + + + Pong! + Took 100ms. + + +

Components

+ + + Here are some components! + + + Primary Button + Secondary Button + Green Button + Red Button + Link + + + Primary Button + Secondary Button + Green Button + Red Button + Link + + + + +

Verified Discord bots

+ + Wow I just got verified! + +

Full embed example

+ + + + + Sapphire is a next-gen object-oriented + Discord.js + bot framework.

Sapphire is a community driven framework that aims to give you all the features you need to + make your Discord bot.

With a history of many other Discord bot frameworks (both for NodeJS and other + languages) to inspire Sapphire, it has become the ultimate modern experience of writing your code. +
+ + 1 year ago + yarn add @sapphire/framework + +
    +
  • +
    + +
    +
    Advanced plugin support
    +
  • +
  • +
    + +
    +
    Supports both CommonJS and ESM
    +
  • +
  • +
    + +
    +
    Completely modular and extendable
    +
  • +
  • +
    + +
    +
    Designed with first class TypeScript support in mind
    +
  • +
  • +
    + +
    +
    Includes optional utilities that you can use in any project
    +
  • +
+
+
+ + Open source libraries to aid in the creation of Discord bots + +
+
+
+

Embed description built-in styling example

+ + + + + You can use several HTML tags to get discord-like styling in your embed description: +
    +
  • <code>content</code> for content
  • +
  • <code class="multiline">content</code> for content
  • +
  • + <pre>content</pre> for +
    content
    +
  • +
  • <img class="emoji" /> for
  • +
  • + <blockquote>content</blockquote> for +
    content
    +
  • +
  • <span class="spoiler">content</span> for content
  • +
+ + +
+
+
+
+

Server crosspost messages

+ + + Hey peeps! +
+
+ We have a redesigned website over at + https://discord.js.org/ +
+ Check it out if you want or not +
+
+ You're most likely using a cached version of the old website because of our service worker, so make sure to clear your cache + and any cookies/service workers you have. For some of you nothing needs to be done, for others a so called "hard-refresh" will + do the trick too. +
+
+ Bugs and improvement requests go into our + site-discussion + channel (you have to be in the server for this) +
+
+

Embedded video

+ + + + + + +

Embed fields

+ + + + + + Some value here. Some value here. Some value here. + + + Some value here. Some value here. Some value here. + + + Some value here. Some value here. Some value here. + + + + + +

A tenor-gif in video format

+ + + + + +

Inline fields

+ + + + + Some value here + Some value here + Some value here + + + + +

Inline fields with a thumbnail

+ + + + + Some value here + Some value here + Some value here + + + + +
+
+ + diff --git a/packages/discord-components-core/src/index.ts b/packages/discord-components-core/src/index.ts new file mode 100644 index 0000000..b566ca1 --- /dev/null +++ b/packages/discord-components-core/src/index.ts @@ -0,0 +1,2 @@ +export * from './components'; +export * from './options'; diff --git a/packages/discord-components-core/src/options.ts b/packages/discord-components-core/src/options.ts new file mode 100644 index 0000000..e35c0e0 --- /dev/null +++ b/packages/discord-components-core/src/options.ts @@ -0,0 +1,65 @@ +export interface Avatars { + default: 'blue' | 'gray' | 'green' | 'orange' | 'red'; + blue?: string; + gray?: string; + green?: string; + orange?: string; + red?: string; + [key: string]: string | undefined; +} + +export interface Profile { + author?: string; + avatar?: string; + bot?: boolean; + verified?: boolean; + server?: boolean; + op?: boolean; + roleColor?: string; + roleIcon?: string; + roleName?: string; +} + +export interface DiscordMessageOptions { + avatars?: Avatars; + profiles?: { [key: string]: Profile }; + emojis?: { [key: string]: Emoji }; + defaultTheme?: string; + defaultMode?: string; + defaultBackground?: 'discord' | 'none'; +} + +export const defaultDiscordAvatars: Omit = { + blue: 'https://cdn.discordapp.com/embed/avatars/0.png', + gray: 'https://cdn.discordapp.com/embed/avatars/1.png', + green: 'https://cdn.discordapp.com/embed/avatars/2.png', + orange: 'https://cdn.discordapp.com/embed/avatars/3.png', + red: 'https://cdn.discordapp.com/embed/avatars/4.png', + pink: 'https://cdn.discordapp.com/embed/avatars/5.png' +}; + +export interface Emoji { + name?: string; + url?: string; + embedEmoji?: boolean; +} + +const globalAvatars: Avatars = window.$discordMessage?.avatars ?? ({} as Avatars); + +export const avatars: Avatars = Object.assign(defaultDiscordAvatars, globalAvatars, { + default: defaultDiscordAvatars[globalAvatars.default] ?? globalAvatars.default ?? defaultDiscordAvatars.blue +}); + +export const profiles: { [key: string]: Profile } = window.$discordMessage?.profiles ?? {}; + +export const defaultTheme: string = window.$discordMessage?.defaultTheme === 'light' ? 'light' : 'dark'; + +export const defaultMode: string = window.$discordMessage?.defaultMode === 'compact' ? 'compact' : 'cozy'; + +export const defaultBackground: string = window.$discordMessage?.defaultBackground === 'none' ? 'none' : 'discord'; + +declare global { + interface Window { + $discordMessage: DiscordMessageOptions; + } +} diff --git a/packages/discord-components-core/src/util.ts b/packages/discord-components-core/src/util.ts new file mode 100644 index 0000000..425b017 --- /dev/null +++ b/packages/discord-components-core/src/util.ts @@ -0,0 +1,22 @@ +import type { Emoji } from './options'; + +export type DiscordTimestamp = Date | string | null; + +export const handleTimestamp = (value: DiscordTimestamp, hour24 = false): string | null => { + if (!(value instanceof Date) && typeof value !== 'string') { + throw new TypeError('Timestamp prop must be a Date object or a string.'); + } + + return new Date(value) + .toLocaleDateString(undefined, { + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + hour12: !hour24 + }) + .replace(',', ''); +}; + +export const getGlobalEmojiUrl = (emojiName: string): Emoji | undefined => window.$discordMessage?.emojis?.[emojiName]; diff --git a/packages/discord-components-core/static/aichansmile.png b/packages/discord-components-core/static/aichansmile.png new file mode 100644 index 0000000000000000000000000000000000000000..7ec613da45786fdb6a22889a917e9551d6759e6a GIT binary patch literal 17589 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 literal 0 HcmV?d00001 diff --git a/packages/discord-components-core/static/avafive.png b/packages/discord-components-core/static/avafive.png new file mode 100644 index 0000000000000000000000000000000000000000..e7aeabc028aa7fb1d36f802c23ed9c89e28f3ac9 GIT binary patch literal 60818 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

WmtERPOJ1Z zlzHn*tBV4W#oHo8xV?!Egf^8*$5COZS9{$S$Y)WE4CftR{5@LjZCN+{;}lTmHz^H2 z$;lDs+JcPBi!@|1_mXo=t{=zJ;fkPfraHrWLGY-ZP|$z*iF)3aHf6LlSlDRLu|>x1 z*015cOWS@lf(_v+uEw15efdjdIsp71X!3of*}EfLjk_lQ@Yv+uQ{`85ri%meBc{+1Wdih9o3S~i&P}stM>T)J!IJeaV{tEL)?G)NL6=Cs6VuJ>bWg4D6Akk z#;Nunz)}uC>|>%{(F`6CcD!~K@S2!+$Mzfd%USU=j7hpG-7&$4IYv7py}xmZ?3A=g(7RLs)bZ6I?e1 z)(Ee7&)|A$*;G+a7Nx?L*Ib3F%yyjDY>4*hBN1Tmmh*_1Qrzca*K4;BbAc~{s3|`(q!_-4$T2^H&I(7P1A0Ko{q z=VpF%gfb=F^iJ#^q;IqW8i;Jg+yX~2Q?@+86Hp>kGF+OpIO>4&kQO3IDK!XUgZ zsp-vq$Unw^cvII>^iO~R2yoYF!}0#!HRrY9uVrd@^CR==q~vzYI+~ON5P<5C@vq3< zl0^4ukE9S`P8@kp)#rf7NJ&wI&pT99&qQ>z#9*>N6v4f~nI5KKKZ{5-S|0_^zEwTZ zDg2>b^po5f(j$AdX{M7=3qo`J#i@-{KO5gvH5UsyQmp4oRl(3mqfwG;28uATgNE+* zEE1Nl1{T>(jm|5?Oylsj$ly7%S)O9GFciTqXyXGw*D{*llf?W(qQ#k=tHNd0zsuU>A3a&*?Zp>+zf~?QnX^(R$iXo& zd|=^F<}zx^R87n?zccwQ*8wAKEk0Z}Q1K)eNqJMMfm1YJA)!%+^ls5xDD`vCfy?7!nC5W|GH%$ky&kq|@c3!0m~OkB7c5Yf2kf@)j~*mLgi z-XI+uF}3sz_Y+W1D!50*c2rfeW&N}{{W{oO7wHHFG)uuB!=*7Gv=-DgtFriEI!l#1 zd7UMqmc50`dKBYlBXJcfr_mAAlo$wP*P+o4t;@SF8QJ2xScph>T1;`hug9rX??y?e zqWw*vml zE=tzraT4;Cj3X)1ImQXH>4vZVUjkoC(*^1hSgVpI|9SHM33yXqA@49fm`Bn`S1Zvt zC5;i8yupCHIX>}Phu1F96|p!Dy{CmatGA$_J{f1Rh}_UHD<^pKu|p z&i=_3DFCj@iVDz2gD>J!b6Zc)5NIQz!$<$`L@Toi5gEc{+50nKPZN6tA#cSSS)nGu#KQ_`cLUOa9h92W> ztEF#zG)3gmFz>aHnilqXB-&_BJ81aL)ggJOlXo`pfgs*{0ds{xlers9T+@XId{;sgB1-&4y}A<|EUbQx{tX6kBX zzuNjJY1WRA{|E8#$)NjIwY@P8iDeIJEsfvib-~FgY%z|Eie2x3ZOVLXU1WElq~9X_ z2W+H1eVQ;JQ1VK^FMKb!9c* z%@Z^i-^s~RMVv0%T<>ih(FvWH=YSBM{{^e_CZdSHI^L3dK37@u!Aj9g(9_q-(GlOd zRN}A&!u^pe-Qw&AT6fElIzvj4rc9{@qU**Ie%L&{q)T zUl#_+87~F_7nt7Zq7XMQ^6&~$9e9sgUGufD_ zu`Oz#exb(wZ`QpIo2TC3j=L{^dr8F<$vqM2x90!tc>Zv(8w(N9oiOq1;mLF6Lkn%D zuUewIHp#NS8F^84^^Kt2aes;Y_c#M1H1JOhS_%Ye>Uj9=$!FByOI;KLUD|y4*SvV& z&cLmiz`Vedz`QMO7eBO@h&ZZ{1oe~R|F!Y$A1Z~j_vk0hE5O7Ie^#|x=MzUBp@HM; z2iv3#pwrZ0kSc2RNYU&ASpylVId8Nh!=a3RwM5bUj*MY-8REit00x$RwXC*GRmp2a z)_3SP27IaUw5b4#t6Eu1IwcF0R+#J`OM`zv|4MDLo$!|BAXJ4a8ju5FtF5-Fih_aXR*bFjvD1A_N2_Id$0@ IX>id00JoC+SpWb4 literal 0 HcmV?d00001 diff --git a/packages/discord-components-core/static/avafour.png b/packages/discord-components-core/static/avafour.png new file mode 100644 index 0000000000000000000000000000000000000000..6e28d6d31d91cbd51f8fb778f6fa467a69be560e GIT binary patch literal 43796 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�QNJ@fVAtU)tv1(_#t0K1C!eF5 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 literal 0 HcmV?d00001 diff --git a/packages/discord-components-core/static/avaone.png b/packages/discord-components-core/static/avaone.png new file mode 100644 index 0000000000000000000000000000000000000000..6cf3cf4cd157a374fe35bfcd6c1a4ddb1fee1c56 GIT binary patch literal 45081 zcmeFYWmjB5(=H5Tg1fsr1a}?WC0K9|5Zv9}2^I+M?(XgccXx-uCFq$v=f2 zSu-E@p02)jbyxLOvLlogrI6t9;UOR(kYuFARUjasP{CgoSZMH-r3#g92nbRL8F3Lc zcm4BB7;nslhhe`pFM3K;Q9C#|vRoXjLH%qjAJ41oj81O z1iNMRuR|YiNJkLwk?+(-Cc7I*@Ec@XI0PCgl(;`EDkOPN zqJLnqKm-OPIS}xFFGC~&r%C^N8wha6$N>a$vswQ4wm+;gl!(dyjQyWW+Y0{Zu$v<# zkpG`ZARHj(|B3VGhLk0Br^tu?zw`YYLxsu#{r@0r0%!xaW1{iFVE!`)7y$170{CAI z{I3T7f1m->BS54h&Eq4$=JVBODL_&$*_eMfiNC1?iy=I8pd{dvCxj>9lQwCN2H?#S z@QEG(6=`@(Kz`>ZLYs76EkdgnkOL+18PgXcAV+j3O!Oc`)F@1J1(B8j3tmDGm|O7` zfTivmVqA=#Rw?wkNll}wD$Z$rUXc7J3)rtnrz)#T?Ii5g*DL- z?+~G1N5}lPa1q@(BMpIUdMNa2A|bMSuw@)EA|am5qJ`_2{*DUM)!JP~<7re04oQS$ zP~tf{P)R`NsBl2IKL_kSB2z|%@=Gz@+q*-rzh4Xa_6bt*oW@gQ&o!l;{9PI5m(*uC9XJrYD1>V0VPe}WJ^$Dr}mMQ(Fj$!>GGel=0

#phrZB^(3%xVvaM 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 F{{gRK5JLa} literal 0 HcmV?d00001 diff --git a/packages/discord-components-core/static/avathree.png b/packages/discord-components-core/static/avathree.png new file mode 100644 index 0000000000000000000000000000000000000000..6de5e7b4381ce4d94565cf3ddef69b3319d64ac5 GIT binary patch literal 42152 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 literal 0 HcmV?d00001 diff --git a/packages/discord-components-core/static/avatwo.png b/packages/discord-components-core/static/avatwo.png new file mode 100644 index 0000000000000000000000000000000000000000..32b8005f6aca8c511f1b8f6306dba50daba908e4 GIT binary patch literal 46727 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 literal 0 HcmV?d00001 diff --git a/packages/discord-components-core/static/blobparty.gif b/packages/discord-components-core/static/blobparty.gif new file mode 100644 index 0000000000000000000000000000000000000000..d737af2bfb8be47c09d08db8a66a58f356ed5dbe GIT binary patch literal 15843 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 d2cb(FAB>$asZZcRMgmZ-O1%#yj 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 QyP*v5K-*BOUIP~MKO)ZHcmMzZ literal 0 HcmV?d00001 diff --git a/packages/discord-components-core/static/discordjs.png b/packages/discord-components-core/static/discordjs.png new file mode 100644 index 0000000000000000000000000000000000000000..c7fb751f4475fc175bde9f331924be0508b2d556 GIT binary patch literal 4788 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 literal 0 HcmV?d00001 diff --git a/packages/discord-components-core/static/dragonite.png b/packages/discord-components-core/static/dragonite.png new file mode 100644 index 0000000000000000000000000000000000000000..8f0059b93a00906313dabfbb172465c5f3e024e9 GIT binary patch literal 140304 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 \ No newline at end of file diff --git a/packages/discord-components-core/static/pikawow.png b/packages/discord-components-core/static/pikawow.png new file mode 100644 index 0000000000000000000000000000000000000000..eb1e33b43e53f001b716a03ee92f5cf25c529613 GIT binary patch literal 18631 zcmV)Px#AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_002k4 zNklXPP*%(E~7?b(M zBz`oLnM@|eBpStJCX0!KiAwnCxB+>6<&F14}bQ7WyA(V1k}u( z_lqN)Cr^$(*Gqib!wg?^HSxe8qM%NQFaR}ej$C{4f#3P9Z-3$KD^HF!ST*eEs7259 z`<}XhbhZab4B!wNDL6{NQceM0__#O^-0}Ts9^KtQ!~DS-6 zVjW9g_uo7SOH!2l|< zGMU`_p``=vxnAaJ4`VPO;@2#oV(3_MCd;mTF})klBZ|6ERReMsaHDICY`*)m+qy;` z|BI+rdG0Au={=;XIUDWijA-Mb&j8Dpzx+)8;fvRB)|NrQ(79-kj={cse}E5s>wjIf zv9sf+la(5WqGT+`15$}Gl@9v1UCQvqR}yuv1&Dwbi|Qw=n|{59MijLHJB=*ih*uB zz2}dY5B+qAj0IK|)+G@RK}8U}Mh6j0N&{wD->U zM}1ueW1g!83hJWIIv6)Vf48u7sCFu65SLS9z0>f~k6p?i{qYs_^jAPlj>HPo7Y|V# z?8X636cKsJzy0ME%X>P1`lv9M_L}KlL4=!NDG5T{)y1LF6*4 zdD~^2jUxItuE&_FHz`y*lG%g5vtrRtpGjc^K?A)BiUcc4Q9L01OG{j#XVZBMo%=i_ z?gSVHu8$@9?fm~L zHN)#(zn-su{q?-=b?b<$QCPF5s?4yL@TJ=D03E{v7>Pg)k;uEh@#*KS8|wS%(nt+t zz{(Cq+6-S;{0MZf+04*Imtv{|0I{mR68QVsgI~M)JGcCLwY!@9#22yrikn8&$(^d| z0M1_D$%`(i1JKo7<(gNm;Yteo-MgTPteH+&x#@|O(BW;}g z#6b5?e0fiMNa{YJ5e6rPD&z6chQ%e`6@|sKQ~<}^(fy3x|2>k{7?H**M)x|*U-xeK zg}=D)>JJ~?bGY#nTSToIvHg}8Um3Lyd;wVOfWxB^_e~7&ve&F(-I_rv6+tjLm3gjX za9AQ@Tv%HM%nZPz_kWMM{l{?PFo48e7hm>^kKT81Yuvbk`wbYg_XXv7HkV+3?R8)11sQrzJC;#e=58d^*Qu_(Ipqeeq)}Ouo4oCb+ z2eSrPIb?a;m320+?WbB1a&fOV2T~>{%N!^JT=q%NhP6bs!Q3>_bmpe}zxWpUY4J#z z2t@8eu&~uS?RC=RWks zYX<9;^e48EW1~$jedFJpG}WO$R*4?-i%Xf<{uFbEkLGMMGmtVw^omTd0m;~_LO8EL z_u4b5bg#zv4MWua#n*4Tyk3c)dnz=J1i^wN0a%`O3IT8ufFOY?y|w5+5=BMnS+|zn zbt^L;Vr*RW>el3w*X+LQqXQk)pByVaauUvc^WC?LiT?yRqN+GM$N2a5(HuE}V30C3 zs^YN01}p|9`zs-=;n=)eK1&yXgbJwSL8OPlaOjBWg54#UdKzHj$Q$38SFm z0=uy&-s3N#I8v_+v}QPd_kA=*$FeQjC8qvs=U@Num&c~Txu^GO8G%~WpsG}2p;i&9 z6``}kP^}1y`(p-sBTi0Qj*q8|PFMzeB0B2^RT$_tEb6Z?*jMAf{ny`FGWqx?|GULr zr?}2YV@!Q9!ls~%H)h=de(7bGGS&;X*88u zRX8}3aNtpz zjTyXHs1Ed%Sf~e@h@xoFR2_&ZQDZPGwrpf>v;pZ9Kqq$QcUCX2eDKlT&F2h&;`Fxz z(k+Zd^9@|^+M9}&KJ&)E0j75CVf^7Iy!jzAp{noeUiY@ozvy)zNtO)O`PPFo40cDX zSy5%#;tCxV`1pT5OPp=Q&ZUbZQmd*x4u%X2sK^RY9RMzK@H_+etH|93?o-wCRic%m z)&Xau<`RvnV{uf!lSEhb0%HOmSSVYXeEdU&k4LX zp7}=GSu8eX>$J#R&_1 zUK~!82!mB6@}bQ@Lt*A5CCjM{_8=V{ZB(fx0G18>*6~qB z{^Mc9HAvMqVu{Ya_Cx!3J+$j5=e)=P==9f0cyp@8sCb(xvj@ST>dgp~$p@Q|OiVJf z?=W-68rZp`I6~M)3(E?Sg>+I!Ocd9UxD!+9MJhd*N-t4$KN44vxPl2pC|TNsQ*5#s z*PKG_6t*#rODAyYG-_LjCdKty3YbZIf|CpDu2cu9E~(RV=2EJIgP2N8X7VqDKI4yU zXJ*&FY>RGF)mK0N7xyGbPyXagCxBRk%Pe=7smU=lTd3E@G{}VnFhoRXv&qcSV@&To zNMmdglW&?g^fLv)0Y;5jF_>x>rel~&&m6VhKH}a!;*L6|qlSq)kV-YU*bQ(-Kq?b9 zTXWe|Y-$L;I>p)q*Gh1$25xqm=J+U$v3|_-UTkv|XPX#xZPGpxLDk`sQRWUPGY1Y) z>0D0N$~s+VE+g*lLXCvA1Y}gDf8$!3qhmBrj*E!ARN%jMcbX5y6GCc#a=cVp`d*ER za~9fuIGj3+#QDn$f}3kHbMP=TduN%O-b*FW)%@%)t4dt!rrOg*$I?aAhK8ti^&%a0 zM5174h39HiVsWPQ28yBLS$hz_#bIzbA}Y|v;*EDWAUJ0+3dzhEjpN6d+VvFa)KMf) zyYQNH?p71QX!w5AMP*SpgX`B&UEGhFCB(`9-1QJq(m=5d)LiqT_w2r7-_f6( zpHx!4Q8U%K$n%ME=dRzN@OQJxvKL1x4x?4719ke=Z=hqzB22ZGyBnu=?PK!cC$U%z90E39@Xp=S zqmw_G9NIWjlY^5eUudCD8?@14`l*9V?;gwLTUn-{AWn#SR?>ZDFC8mZQ0eLSzD6}c z@@W8^DSg`@S_y6|qDVq$9jee|qf zPv_EQNL&v$)8GJzP|cE`3cz{9iJ%Rj{+!?XV122liX7mSeU|OfgCZQ1W%_8iR~FOE zC|<)gF6gH|RHiN^ot$81{~o3fPNL0`uvQO#Rj+Fsh3Y^LJsZ|hUp|bTn`7kez1XRz z01gAM`Pu*PzylBLocr+uu%++SDER&e@iOBqb4N!R-!V;dVh3@yO=@yQhbX3V$ztkj zSJAa-1w@sw$aY|PRvZV)F#)LAc@tP%fRN1xHRGTJ&%E% zLqtYY_1vpJu>a_e{XbqWjU;-bn!r8y-4I!F1P=t4L8L0)Cl`%9g2T@;(5lN-6ztrT4iV$H*i71q)d0LDQw5lmX zEqqrBzb#R)SG`m;>H@i1Qc1(xW*#NyBQN6oJ<>Uv$4)T*#1k~fCNZ>|38^?LrjMRg zi%}y?J-Igv{(e(cuR8CYdvtv2$0rXZ)%W`vk4D18uH8)UIfkY)ZT6CgU|ogIr9Hpy$lB5XC?Ycw5LbR=+$iLp7X-vSMO`9p@E{IBZlfC)8)e8Hob0 zLXD9Wvh-B@)L&B$2l-kE*Y^Dah%Rtf7m&pUEbvrlNr=d(H;adAh`czI)NA4axDHFC z5w)W=GN>3l&4eT?tJ@rWLYSTyYAY8JJ9=@UqIHp;qwJ5@l}&6tS~5;AsZzjJ{1slF}Sd8O5pELg|nI+(1z- zWC{2vxfVbECV56(_-elCWsQ+8c&Zjz9m|`;ypr<{* z;3noA#GsW5z3W%A__DL9_4UrXj!Q)3%X|NE<8SRg)Z!)2>ncLkKjaZyX_*TxP@6=E zMyO=o#LOHhv(R>yn*I3DQ6?8n$#e)yXgf;YlQwpEid~-P<@oo@l$0V__tcf0j0kEwc#{Z}ml&U7E^YiUMO4)Ga-wwML zK9J!4%I=w8a2i0(2U^($=kj}b`B$)Vub`#DUQF76o8`u40Q8>Gs4Y$?`TGTXHc6O# zaxW7*_n+d$0lo&j?rk4E*t+xkGd~mnP4@5{_vgu}G(1$>usoO#s#t9Jau(apusGZJ zLNP$nT-(dSF-j6@_X2jSZBr<$w8(9=%!496HAdCjaqY^519ka#itugPevL?A)unt_ zkdAif0n=e%(v`?O84=Jzf8K!vQhN86AwyVm6P-$G%n;)z9i zVip_+XpWrV_}!0y^`WMcJ^S}--mvp+D~BuW{{bTUKY$JtJoRlW&nQh8V8F<;}1q&@q26D=E z!SStafF)z?BY@>{+g?C=_MZ5eC#Zf3GPbVWyP;Ru%3z7!F zh0n#7o|7){lf75?JAYn?wC7Y+zE7rAYB2V*=Pj_#5@6Z`NT-?*1(FxssQi8ZxuJXA z8V1f}|xAFW=xdg-$RVw}~;X93u9JVNo22JdThIaXzcw)Zd;(eUgZ zd2Wq3qFfEv5}OK90}U>+oT}zIo>ehYUV52jX>d1}s5Ivi*|SV(6HDnB!E6!9I7^lR zTDZ^Vt2YIZC{dXU3ZP(9q1jBBm}oLGGQ-KSCN@>NdSZqKIvHA2qp!C{rBWn}^=#fi zrMHI@4?KxYChHL#1C{_EpO|rPc{TtPtMAtwASHXSP-aRANcl#T3qK^^%=y010-)KZ zmlch&>&nez%>@7pqq!VuFO2B24asTmAq$+-HY)RxXE!l{a|IJDxQ*AW>E%Pec`-l#*3H!F2IGXuC!Sz@`%|bU7&T8J zuC?m*Pi%;zr%x2l0a(VcOsVl3AUOcCd{J`NWqjH_(L4`}l*b=MQu4A`%HCdo|4OdRP+GO8`xHY=mfv>psYyQe z`}gws&+TAtHZ7;Zow~VsmO&{{9WFKkSHAQN{`}8h#QOD%5SuXi;G@hQIFfyLuPT4_ zi+^zFW4GNmjh^lq?P-M>Ze~&>lvxGeX6803=V$u6M7iwC5_b#p_SAwEZ;ojxQeL>Z z3XLv9g>q_yFKaXNxCIM-r|ddAl|5#tFn{gLd#++~civrh9p)F`bsJASIerS^=xr-k8NP+1uP=2LIGkJq2O^{e~%+1GxVC!QSl-6w&0d#Bj`*a!y?PcheM(OvIg)v6xOK6?pguIi&!CC__Nv4KUU z6e<1^0Ob+Ea{+CO!e@w;z2E65EMwL4)&4@8EVJMuTcF&rYVVU%y!2&XH+vx8dV0wC*#~|eh1(9#vTqF znxffsr!1_eyT;jP5ApW5Z{syTvw@|{x==~U>hI=ddNHMm=RCrHow9 z1iu#KeUTkt7Kt zBO~1W`TxTo{?Y$rzBXupHAV+ zVuLR-XhGv#iz>u=*c^qK*@Roawue9cllyt#{t+6@XP>~jW^F&e_QB`zwzqAe zwt39WzxaU{Cw2L>q;cKL+TOh5Yc(4&zw0M}` z{oUW?9q)Jt^?LoZy;PgcCSUyG7kU5t-_MB?C-TqFK5vL`-Tp=f2RoSAcaX6M9z~3L z2_^9btAF;f@6W&2DZI7qk-2K^g3H>XswAo9&O4ssnyYW&EpPc3?z-zp4m^=|cL1k( zz}`LM-1wf``MEcJg`GRcO15O7j8_Vk{w{yg4!pTp%f~_JCI2XB4rTiJBh#Oq{RpjQ zU^m+KUJD)zeqMT&9XrQ)&Fj9*U3VTTsdqk+Dr;cw^}?bxq@40u76QvWMw*|`+J}_S z&##J7TKkYZ41{qjvboiEpPi*9=LC$?Ua-ZPN$9^^-)F& z|2rrgEz38){?xO&M-)Y@TepsSy}sZcobISrt8CtQ7I9qkluJ{`&HrZys!Ckzq-$ko zfC*g=UOWFD`8P8xbI#=t_EC7{!2W5jzy4PC?w)KD-0o=rI5054Raafb8{haw&OP^B zdV76_*4Wq>4?OSyH{X0Sx8Hs{v$L}~unr!W;vMh$2Dg9n4Gb@>wfRw>X)}KKqm=eo zIwmG8k3IhMQ(H2n#u)RAa_@BCuh;8DQACmyhWgjPzMqMSCVl-v_wr>-?LLGd!Kl8p zUNe6>*DMg(Sm#hDIO~B|&WCZ%G1F*r<9qI4$BuE&eDvvG2w?g0<^1+<|2CietD&{dGNplQxmOcbq{MTCr_Ttk-vPD_jCT|s>+N`G3#O&hpSh50R!Jzcr+YqzP=_KI+v-6Vb6OwBvJb z5wN`NZAFd895p%62(2VXjy3piAN!uiQf*)CLW>d+Uh#@o@b|S zDsniV&M}>xJ9_jefBxrx&Y?qxp4Br?oH)U!KJ_W~@87@R`F(pQNE7b^uJm*xm3r8D zHkYq6SqrM1m8wOZ&}gLm-RHIkJMQ!u)#YRP^5vX!&N=h0T-ZC4c}7$m7hd#y7B61X z7L#)hZo27F8jT{LDQ(e>9}N(FG(U7+q=?+Rr;)dD9J7A?dS3a;S8~-=SFw8aY5>0R zjc@SLkAAcbhzkM#`0?ZX;UE4Xx7>0|&OV`?T4!dnd{ZT=bznM{Wal@wy^EKBf{G8D zXaMH+ohNyG`^h2);aTvL!NEcL`uf^F^TE>6hUHba1yU?pG)zxV&neHi_r9Y%^5{t} zx^Q_gz_VKZtoY{Cyp$jO2v(s;{%-|hQ+ObXtaV36M+a|y^P73!``*X8b?b1>v17*$ z{>T6LAAI@CU*>b4`y2-j9N>lE}Q zZCZU9*xkLA;8a&6GQ_>pG^Z6{RT}_tf|HPStf0Z47K;`-7P{`4WP*2; z+XcVZYFNJZ)%{#_;qrW|wFESMdZ*p9Iu>@MLr-5dcTy9QjYWjZFTb4M{oUVY)v7i5 zwHIG}F(3WtM>%ld0QcT|FJJ%q*SYuJd)c~mD;qX!ps%lw>FH^nc;X2jfBbPqM@PNp znPJNU$EsC*M6s{UbOIfH12hjG1LO=Nkd@rWnd?h5TZmw-<2!er%FE~XP@8{@j*c=m zHpcMq@M*$73m+pRBTP)R%i8Q2|Nid>u+2*_Ay?AmSph$~W1*n>+SPser`fwyDivP& z%2#s68Ee|ERaG`^+QgMtUde+GK1iCTjE;_S=bd+Q*Ijqz*ObkSJdP?0Gr055TLd`N z`4%hH-k$KLtQ0NY*f`TP+B&n*z_1=zT;kN&}qHqtc4Ff=sORuY!2HHxBeuAQY@ zXX)wbVat{+Y}vAf?(Sl8$SDyN5h5`R^>%Q{s$t|mEc%rh%r{$@V+L(iahAbdw`|CB z4rA+FXxNI+>J!84Op}viKX@7N^z<}0-+VJyUU?gkR>d-ib4Ew?Z?H@~Zq z2iVkP%G{i#vpZAwi*$*?r}_VWv{yw6OP2NU{7aVduV34jQ)rST?Ao=9R+>IfOQ!uG~)M_<0ZrsS4HEWojp60Q~9^=?Ck5SXp(|qbvpTb(pFa6Rl zv0}xFQ>ai?*|%>WfAS}P!r%PO-!L~fcltyiarsmWux36s-)oPWq&pw-u zj-u+QyStk$Tec9#F_%UId}ZiLx`@e>x*`MXm!Qwv02ge+tQbT`ryxzxo(S%E6lSKc zk~M2?;sbxLu|tWpRQ;gPN*!{VHpe|ZJ-qLI@8jL?em9F3FQ(OMasU1I^WhJFn0xNI z2k>^z$3OmY?z!h4Ui;eDa`D9%Gc+`Ws&f4JaqhnRZf?2d7Vf|Qe&!l;IZ#gp9#krZ zuFh&9@I@(FBD)1_)F13{rFNC`}4;bTCMVPKX)BRj(AF(nVI3X+iv6A-~Kj>7ccg99xyR6!RY8{A@iP2L@F#>-bF_} z3SlM1spM=eZ$glVgtGFlr%l&f@IgMmw9HO@bAs1gyN0*Cc{6|g*N^A#1TZr-%gog5 zX&&UipQb6F|NQ6Kws{*@y!b^p=lJSZzskRS>B}rKRo0p=&z(9VJcZCn5H7jo63##Wc^o-* zYhk3QGB-EJQ%^ljTy3FUE*Uy6xO63c`ip;0BR*|W$f{GLHlw~s$1lsu(;p_NaHslg z{rBq~RX+B6m$75#7~j47$f+B?Pniw41xwkA$nS9`rk1l!9@23!=5iYorob!?SdS}d;XY?@NT~)1C+x(nT z+M#N-%Hp9#<+@GyVdHl$%d3QIUb)J5`&C7p=Kfj$Cz&={l%sj?#j}5I5xp0mYbo0Oe@+vlM9LP8G*&eFOi4!Nd>#n=_?svb-_}CcWIO!7pt>OETVjcQ{&%)#F zh(2F0u*de1{K22l`5QY|HCMbjhL97J*>{-$k7D7{%a-RW%wBkQw!srmJkf?_nH@DX zHO20|dy1ZC+Ai0OF>MJv?O3qzv0`O67hkdj=NySTTq(&aO93fHj+85Bec4;Nl z3$$7dZo26vF1ze9&N!n;&q&jhn{U3EhaUP~8*ss=8=QOYxmM_mfdOPjL>q9+OtS;hX87qKU@iZ(Pop@+%!>Vm8cS7 zQPyu9;Fd35!+YQNZEn4FH}=_DTA@o+!EOy5b;IVj43Qi%#5+Q3>cgYR2W~=_4`Nm? zg}8Ygs+f#8LK4o*Y{Khb_hr8S{Szfj z^0v)OUwS1s-0&VYZr;Sq)HGlH>Q}kxrkgl?Y*~Bd@f`>7x<3yx^H-;QZEK>I9ve;pF!or8REp zT;4^tcJ{oJjKB6NTyOG*Rd0Oa7J%3}9~p2qYt!f-+*yyg{vF$R z_yhmuqvGLx(lq6c+rGt9_dLWoy-OIfF_TkMY;8d$>fxxJr5V^xtybf@>#k$#)~&gV z>Eeqo=Gtqo<Brn zF(w44gA@AM99b}1Y?G4@ZKpLdii$FKtVYkq7E-TxpRt9`t_r{Oi`)3w*RAEAdyjC} zw~zAZW1}27JdMv+QR=k{J>7n!&+c85#FdCEU%Z^R|NIutJ8vn~ns=I{OQE$ykPBnx zUSjCDU8&tIaKs|kp#ws5jgoFuCRUszbf-Eqd+*qhVAN+`i?iO43=xTIU%i@txMeBd z{f;*c2B>m%eHlOBy_V<2i|BPRv4Hd$5_QaJ%8u3)e>wXkUuqs;#u&P~y4w7MB0_g} zcd4aGJN6>*?qAr(t6sgCz~s(-G>@LhHMFRwiBzgsb>KoZv-pvBgM%Gh{fgCGebpMQI&4at zXb=(R8YyF=3H1(PXmMv?{~GYhkUBrQ$f@F%8K&NAN5Ns=v2(_6~;HY<2`RGS3;e+q|4lf^D!Y_2KV_nouT=If6#ZtjHrtCL0F7BxE z{Mr!zDc!_-$M5Hx-@1)!uf3L`p&p$f|G@3H z-(JXwkQa)=1s4qSr+@Zh2K(!I(>WnVdVA^Kcm}gi9>myLPrb=WrXC+>=BXx~Yr5!I zwm49VBAU&3QZNzL+0ggR>thxRCd@%ZKvQO(+{^UtLwP$aH68S9SxKd@Kjf_V2JYaI ziM-2jrl3Sv^$lnJu*-1H1+7>C>xd3DiM~HUW#=?no_QtP&3oQ|;_RVtgA97pOAh*crlDaIGfE*cfvM4wIfdNg*)}T^rWY zxo#EC&7Uur5m+{|C##zX=9Vk$Y6%(dB0{`#nvTyug?V5CGab_Xb4AC25z-ZPCazye zJ-3B*1Z0SI{;+Q{&%Pe#;Yl5WLpPI8gKg4#h@7>urBP<({1!bF)0}*w;C1XHL=1G8X!ZSFYiYKXEzBm-cuL zkVgOnM@q%`5@=C_+9s_-N15F>4vi5~am1Pp3jrq;qUr!~XA0FAYB8}?amG6WY@>y1 zHKEx<+BlB0vqVxPXQ=6*YwZeZYuAS6JQgDroGW^vc`D2R>HWr@!o|zV9LNGQ37ua& zM)e;L5KZ|;LwOaJ8d9;u!OH|dC1U2qOxQ;%>!M`92kdW3{l02_z7yQ|J*WRoo(;=eC z79D@Ii|U=@zS+9x&HjFYdu46$$O=>wOZP2Dh>py1{KmDoy5BU@n8RoiN`4s0Wnkod zhz8?bNyd2fHd&d?MKG}UD17Y!c-*BuBx` z9!6>AtZ9C!o6*AQma*PQ4N~bR9;#AXwF=YQoxev`T%*qC3>D2_%WO0tTc%5ZS4>)# z`X~2M`?t|z1X12%EHrb-?l0Nzf>GD+o@A)LpOIf(gR20OqZw)>K%Tx3TXjLehL^Ga zWv5;h(eouobV$)8g%AD(dfWHlS6_v!UFIFmtrU)&M0Xv6hxQ?NKaT7@iq1Aslm}WT z`S{FZ)Vm`F2Rqrkxu2K3WF?osXeDb`_fe^a%3#$~*lW3udC`m@OVjZ0Yz3&+=~%s% z+G>ZJ9>R`~qvO*gjX7+q4{U>SADq~9V5;MoS_h`56Y1$C>gmPQDmVqT8h{m)lQ0a~ zCwmq7uvvqKta8}~fcVxzmg+qdRBu1#_bF?ml8;Bo)@Fh-d)_v_n*_Z= zaZR?>v2zZmQ3xEGP%P-Ner`D&`b5OiKZK6^1BEmbq?r_2q5x5Z_EvC9YBVkt8kZ-? z=9rh%y0It~;t+`SeeW{EUU8m1852T4F=$HOl^5%=-g+%LQ{6M{7jXqu+Q6hsvePSi zJ}ob+7IZGFGYE1`Lf?(RHhq?RQ5mT?PhFXYu0%fG)yMT*WDy%WHUuHtS}Yv; zJ)!eKh)zO0EmV#N0Q3rW$Y570$r`YI3DP0CtT4_H=S4A|v~yaI95xliM7e=$Oosh| z-AEYTAz1-xT3}5W(g>1wz%5vul-M$)`T4NXQphlZ!lX{}=`Oh+RRml}rV^Li%4*8p z3yn9nvtHh+L_4RUVZlUs{hp{o6`D&N&Ir{}A)0ZBRPtE8jSWSSqOBBXgs74MFie+m8i=&e4%^EEv^_61+xSej24AU1s?ZI?Nr^oc z>_thv=4gtjjI-p!zOw5@yn9THA%1c?Pu0(W;yMi{Ufra*!J!giCR_A=ze4u|2AMTT zo4x6&Pn@N(NpPK6=nh3X?rH;I)275yDFBCJOx9Ketfo{Xbndl&%}zr55d*19h)u;) ziIWgh3$jfmZ{r~%(3m0Fy$d&fl2imaD44~^sc+tjHCdEFk-0gVPd$a55S)qV7_Jbl zTn-Xv!4fau0@WA^<#2ho!wB_W`e3I9g(Cx!6P#vkOvqb>Ng&OSL`YsxWayi^f^m3_^QEz?EX!QIvF%)e^{6l8&W%*( z<%IO!Hd0(3t~&|8hmHmabI+otvh4-~if~ zL(WX-+O1TN8>~yvzLc4>6GV)kT^QKDF_12C9DkFg>n@@HyAjgJHW`wY&>VI|!M<>q z|LICu*#L2ERB;^^>B_tTT4-2KFecbJX<#WPuq!8E6p;$q_#CT#=B-x(e1o`(_e7(6 zccU}Yg}&(gy<%f%9y~_1qZ2naN^<--k!Ugd-FuHo4$mOVT9~+kbCUZ5BzQ5}D`8Cz zOq8}3L799kt}V&Hw%%%423*ku$eR{I7J~C-69(6sCVBiQ((qB6sZB7uQs}xrqW8X- z=2CF=tl5H4UA%;3Qqks!A0S;xnYuzqhf@arwL&!I#nt5V(@-A)2Ig#a`R8UEJIVw| zyy5qs#8xB5p5M>-<%2W_3?}&DGRLfBj$qL|-B2iGkQXz4<1`GU%UPQ$a&SNCi4(y^ zW{A7bpzF*!W7~HDDeC5EKJf&Gw3Lcuh`Ux`XAk;&G{<4Kfp%BJ28QRUEv8=Q-JP^e zRd2U1%U;%YyR!ft0nkOHzC917J^rO9Pr}@RQVx*fx`l}=5@t4ABIh+>ql&5avH0SP z(KKcJvB#J`co;~DM48*7*q(%;f2!a*p|LjgQ?)(S?rQa2bppQC2Egcddj>yJn^JnV zPcwM;I5K0I8?KSmJ(gP>k%swzB5evoHdika-%m5^IVK@IWh6!?PT=+*KqN(sARPlN zzGMqsD^`$BPt%+lCz5OuVL*GnR?e2dB_mKpJovtCum0P|=1&5R zbHS{RXfkElS57c=&p1b~S?Be+IU|ByM#d)Hn9EJ2t?qLiLBo9XE4XXM_;aEW(u+5vF=u2f9m?r!v7^`&Og zW|!77ZzwLOOZ9b&^v%vE?i!0k~xVps>|4;Un73lRFKhQYq?#5%PKkn>%8*ST>o_pOhEE-&a-v1zEU5!$Ln8#M zSZh5ia^8ohsz|Ge9vVk9@qfo%44!>HQmG>dsS_fJgB?|jCoks27pg+n>J@o`zr}$h zUfIzES_f$DIf^uzKJcjq8Jw?QBf@2@eP zy$oOaBFw;W&UT$P>+$H<-@S6Ml^6N60noIEnS+lpa(Crv$amGI$C2A>}7Fpbm zcJBwq7bxnH1DNDkE`55|tfIbnDcLC2$jB+cYM)0`Ohl^=^)qzN225=!XazJPG!OJn zr}PANe9Rl&ntI@b%~utQ)XsmH|x&viAWVCZ&cM#c@XuOD?&bsDDuq zvl5%uz7Kxsvv1zCb#-+C02)(L!voxv+!G3t7e0^SOD{X3|JfNe-#3XXw{je{Z5*eiZgA)D+S*LqoU@#UC~)fkUJOU=Xs zfBR2=^&6F;zV^b>P~GW*12gWRT5u;TWUXcF=noypsCc~%uh%p5y_3CTAq z75cXe6^Xl$j-~XhU&p|fEn%u! z3X-7tG#Tq7Es#^Egg|vB4~2@4xCq4E{S05a4dNaEQKJ{eqqlrysK>UkQj>}nqvfQu znHoa;TFj8`-ZM*lyg{li#Q%guvj#zenVUf-rpU$|n7)2$%a=fAxhdhLi)N7Jt`mq4 zhl-SXm`Q1@Tp7sWcN*T$I+L@>a;vaZ9nJ<;Z}k))CeC_*m44dJYl?G<)zr(wt^piz z$P#x*Z-u2-oX@hCZe`%?O_*9#0F4AcQ77@40@6ftR+@%1jF9P;2^=lhYjt3Vf%CRy zb2*G5{q?VX>V+4rT2gd3G_gir3)7&D$D5(M-I8ye9WK_hQ5dCE%*u3(G8 z9cx`sY%)Nx096J9JOh^L)!mPFcjc1WO-(Vm?*Jx_(BRzm$mRj)=R!3Q z{6H?D2{Zx)Dnbg_kn(6rZPCyH44r4JrgP1@48<#z^vGX+?JwV4?d^&(f%o)>F)=PG zTuJ?VX3^Av^_w8hxBW1!In4A_K0q<*A7FUxvb@9YLfs|&fO4UjChdn_Wt$)rBTmbc z)kH0t%pgQWPH=G*YXxT&XC(j+tn~oM0BOTJ+dzrV8k~(t6R@d}hI3Y3eyvw#2s|1Fby~k)A8O^;d-lgY9DEL9_O_WvuWClS0cN7#H?*#E#51wW`*Ndb| z-&yBS>D`d++P2!o`WrH)3ct$T2l3!6ptUnXfv?A3X8UG z4F1s!n~Eu7r<8rEA3ChrWX^mXU1nMoxTZkbO0ae|XFsWlNplKw9&mxhXG&LMgPaRL zHVx{&E#xECwaY?F0Jtsvb~Gz>(k1;^R|$$xgV7y3kyfif)_jU*kb{~aw15_9%L7rv z-=s(o6+Wn~xjv$5iE0%F&pQL6P5={${n$VL!MU5at*JgU0Bx3!8DeLZ@q}n5B~ATC zC8`Z4Hs7o+F zq7F<)&I0q_D5-#pdYsVHeZI^Xvs6DXOVyz|BK#f-ObH$IB zp{cWIYSA<}EvzARjx@D22bN(?zZV$-lY5>*lMLZpK-p~SXK7HSc#h+dxS1of&+$o0 z+$bwl^#JW%zn<#g5IzLPIel#Z!)FGd_|TAxeEF87P#bMxQ=ikKEk}Lsgr7hLn9e2C zmn;bjD5Vvs4JwQCFRv+rMX)%{X4cvq_mvh(> zKvGYY&f(=<>dVEfwP*sVQ)~*YG!06cqN%~!K#eXaZmB=lk}7Fm(Rs<=ChiUQb-xnxEDtfELdOa5 zq-QtIIXa^`DoNrqt;EoCMmJHd8i1E2DP^e+C0CFX(=rK^*Je_bsIE8++Gx-m_4D10 zK&#U$7GB=jLhj*ZUS{lP9vLW-oS;2cC@O7#NBG1km-VS}-flA?sBKe+*88ZM6GX0w zA*FHnF#W5CLlj@z>O9JaW}-_UI&wC7mB15Vml8tcmlvgaWn6jy*g_h^{ z%^W!F!!!Z1jgCI7^BSj5@$mjy|0qXO9Fg<1-Uck^v(ua^u|`<27-w+C<-eVRH6d@+ z`25c_$h-(ajW8#MuDC|j@(P?AABScFwOYs<&8B>E3Ls55pJktCQx5akk7^iARH57} zu5aU7W{({w9h>0)2j!m1jzTG_qW}N^C3HntbYx+4WjbSWWnpw>05UK!H!U$TEiyJ# zFf=+eH99jfD=;uRFfcc7dmI1&03~!qSaf7zbY(hiZ)9m^c>ppnF*hwSGA%MTR4_C; eG&MRiF)J`IIxsLsGQ*$%0000*vJvX)ASu{V}UVzMV$%JQ{KmM~^0Wk~iUS)yf92nkIn zjbtY~gYMX}%-Hv3zMoOQ`?~#Zm+v3OKj-tD_xqgpbDnb!-te5xUiJg*AP{ITN*8$^ z_>W`!u`&U_XD=>31cCTuQAiDAe=zj}hv&gjTi7%m>j&W=gS#L)%F9d|I0y=^F)N+@ zpe@mKRZE@$8Kl}O~7Gw4Q(#JS<&<8m8qdgc_N73>>@Uj-2NDr)DZ6kJ3Z{*Uiq@;7k<+%_ zT|r&NFA8P*nK*emJ$M`KM=^l;9>CmNXzeWmF__c!ZMC7Ybn=}H#!i;u1qv1H?(J*g zQSek);SZaWP1-om2Fh17G?$m(OY7|`(t4dyD}x$X;uk(3*<)FRoi9ERU*YpTyA`wvu zDyxRQe&zG8vY`_}Q}dLjwEN~WK_DasNJ^W);=(oGH$`??-E|yuW_c)F2?F1{4B7NG z8@FDHH=i0xe)8;Yx}?7-2r0m@-^&&=IYIk&hrjDv&%&^Gqdgm^S_H{$y$HMc^%>S# zOkPPbe|a8{Pc(sn&@v26H!(z|Ej5f31o{Rv%AhFK@i@)lVaMMwlPyPGuU)m9d7gBR z?;RABc@)sXIF5z&2PP4Z2CS^NZMzh73Xim~)cfdnNqN!GZx4T}a^Z5@3_f&}SKMp%k{Hf0}WwSad+J{YmAHyIX^{~`L{0xq8oV`w) z>NQ2n^=%17Tye;gzC;uPQ~H4~ATTI>fe+SUY?n2k(iuEb=fTYYb`Ky@Bm$0OQ0cwk zb(>=@GAU0Qh4WW~yAL+qx2#x|fn>Aix75f+8VIOaO`idUKVU@5cq+Fsw-HV1{>p~+H44pl^<}j>-)8hKqQ=*ZK$tGtdyj|@CB&?E%VbNZb$Z(d~^XW zQpL5Ng)>k=O)cAQ)>sx@+Qe9o@C8o=BfeZ|>Ao0{ml}%vN$jrcN|ww)yc0WZx}tGJ zZ4(HVG7Q9Z2*7p!b3g4az?_&&yz1s2tieRu5cA@vj~TerqpVMbrvm(eA=?(n%Y_`(NjT8j5j@iah+epBVNOqT4v{D_QnZ|O`M5SXuk8|Q;c>uL?m~nD^NmTmEx5hsW)WV~n zHLv5n@jszJwtra|uCEV5oynAkgJwxhQ}jt4KigE~3F^>A;XQw+hemsrRVZOwWD>(4 z#EKgkFBn*_H)laujYZ@BBQ^@P&3NU?V!-qu`_ROcC~HQU+*Q@UF*4aF^An)rj*`vA zDV1BY>7rcWb%?5`N={1i+l(redRW1h?((Fqks^SZg7DyazcXflmk{xkFKi4%k@$-k@h zq}>I1`)qdf@$Z2TiBZowq_}R=L`zM5ko~n9zauEJBQ)G;e6ydrdy#s_NwPnMkb7s( z_|IvJx_?hUIa||s&z`6#$5|4F@tAcIbLb&fd%5;531>@*+)&E?yVx~Ep4uBd&F17` zK7DyGS=kGwt8S8*CLpkTk>={=URf5oBdj1ns90Xu1eUMxJrz8q}-SeWU{{~>qd#k&go#hbT3g; zSkF$HKx%|0*=%Q6FaxFlWN$B#+Fb5#V#0~r8CA3}P~n!A+z=&xj_^#O|A9I&9+xe? z7Er9xT&&XZSj1*$RDSWG8miUIZ3xZ%uAC6}&L30=fkS(hsy=RDj^rP{DZXR+(1*cH z0+tsbw5k4%7HxH5;~ia~ZBOb%ANcim--|74y@7MYC4_3gv}va#WCELwV34%=t`x`b}|VbV4{Q(xgt zolSJ%8|7oq6%zt;Vo!%=ik^r+@h{KK7M%}*tTv^u#_P-C%VLP7lhE^-cl;H8^_Q@ zC>&<6Gf3DT4GAxwG3~|5#K@!pi#a_Ui#nNkXO!<`SVUhXRQQb5eyOVCSV^fP2=+sE z{*25K3L>``0sVDrVd;~JVpa*X_B$+;`$%kZ0{+)8<(7W@Jy=(te5of_woR_vZ61ch z;UJ1?OokJ_{_)vulvy2(Y?i56dC_^)+Ul+UbzsyuqYEN!z%^Q+$*AOidD6D74pB%v zB&9BFtoxz&Og8cDE?qXxkpID-HjCLs4`+EliQ&mvA-q*8D@i0k771)`xODmid;6$r?%l-`rL1R&vtKXfAbnDoe6 z*ZP9zk52Qi$G54hV7W|TWHj%R<q`}IYXDqCOz59$$l<{V!+~kQP&Ywq;j>iJq0P@Nr{q@+#AN7^1Hl|1u3M?S6a?{& zO;%#4f})C<^eQVCFuq7b?en#%(bl@_q|;3Nn6dVHkDx$pCP0_X{T&6x&msjoBuZT3 zjrckvR4cc}!7W5OO)$))A%92g`)cc;jiE77hW^!GqoxK1ayUWgB1%BKk#|*QbThDJ zsuV@@wu@NP*JG>KdS5jbOwh|@?iyV2(8ZNB!7~(`ZZG;NI7zA-=alphwO!2rmcRB{Rl2t45b-)Vg<2iw7!&ZS>dQ`4k)F>S2C zaLWs?%?uc7AN^hJI{dEB=B(@HpiDV1W$s(L4NS4rF=xI80NnZM!_P)LB2>|`K)epb zin};Bm(Q%XR6~kvQ|Zfnb@cHU9>6990)OT0@-EQjpkTHsd;icp1KQKAO#r&1D+4nT zmIYJoy5*B*kV;QgOHKsMgy;$$eXumue}>aUDpx^K4u~;9jxnX95{i%_GFaNQ&fQOF zllft>%?5sKumcKM2*5*}E`NNq(U+}>BbZD0J3f=i;fW+L1HdlC1HGg6B@FHJzT3Tq zMc2Hk02eRk)mX>p!>p+yG+40vr|e8JOQ)Rgb}$!=^q zqP9Y&U-H!hg$D|P;~>;-_mc`>WYv~tcp_ED8H)#1-2}O@*gWiJc=y1q?3wzg=naZF zFl;Y{l8XZ;c(e91_#`Jwt*VZ*0p{-C&G!lfQ#=ovSPP_XRKgx6fo9TlZ7dyoX;e#4 zrrlOrETvYzubKAY3r3!PhN*fl*NAu-Z_K_hs@QbXVIoBfg)F|gSEd47!Tj^njljwy zLMxNTSOeWbT6o7VM#;ccgVZzZa>VH~Nd_A$$y&g^DS;(ZfAs?fAr}S$zbxtRey-y?1g1_>qk=YwXuVOK`Y;OgWs7U2g0PFTOoH+FHp|BE~i@X=8e zgS=U~%6e>;m+{$#yr7|E7+IVf&uC$9FHRnNzz=2uQWM|G5VVrEZ8yOTYTxqdb7vaD z?vVTGs-=Oqi;#->)dweTpQySzlUK{T z3P&jv=>HVfwFi)-k3r^3RCLfxQx=6Y47DycLeApw$G7D!-A z(AZ521x*_R2HV}HK@bFOha)==E*bcv-bM-T6?W;5$0U3|BHY6 zPaauZ_*V>Iv3@{!$b^6^0$9PBOj+*Li`Z}Jp1)U@ZCrj&drZ|7xmCMc&s9+0Q-}V{ z3HZ!A32!aRzoeMS=_x>e@wb7ykH|Al1pIjY4lbKbY3Gxz8`955z?Glc#=_&(L_h6z zyF>q0=h*;#_8oXM0$05EL-HJxp-blyD}06sM+F}vP- zV*+@5PvGt%Won0W4W^nU-ClJ_nO}hPIcM!k1q+WQGjz6Xd;T`JfVr`_$libL(ytU1 z_Q)A9hDZT`eg;_64m&skFarS7u>m0fl5VJ!9#ZhkAw+P%HvOOX@&Qo13>fP4-*6s) zRH&A84eT%ll;rtl!HW#~iV@EJ$a zAHi@4BH%r62jHBburyGU0dP_n$nbl$Oa{RN&Mtt*_JB8+lU!5eN|mJEjbckz>o!xp z_c+5|WRPez6&oL1P4rvNIXLGJ4`BZM2jBnRl~Unn@^9j4x~FFVD)dkcMc$=rDG&j} zAUJ_L1Vt4o47v)y%J7A{&tP@J13#A!1d2AHtID}vUetM>RJ3kj-`FNI5dHzL}@9BYBb7`TjakUgvt&sW+kVEL(q zM89zyC(yf`OThf2U-`!$TPhYlMzb*;rhEE@Gce18h@OWT_C0q}dJ&X%kcs)~vC(Fc zWAfx~IyQN>fRq4LegwcE24~zXvRT;MWWehCmcRp@;{Og zYWnIuyQd!l%rlujUg7)(-7fjt)hIr=KrzJCd%k{(-^vd=^ z?b9q#RpE?2F`1NepG6&~WSt$XF!(x`60~WK%NsC&lr@_ikGRC&u$|0-oFv z5Ht(ZF~zehj`Y+34nmhH!M87aNHRR1QdY3^)B+#`gwJPO?{cm@%nv{L=%>o6@-BK< zJ;tO`!`c31PF`TgR6_570B}1kIuzB%3dsUc4Su8uw#j1e$!;G5WfSOV*}r{}m$NhZ zAz1;Jyg;hzQx2x409M|;0Hz23&<_}$m|1mm;bH!V|K{g5R!XH$D}egYdW=bKo@hqs z@Cb9CqDw$0iu#URuPhydq$V8qBvZM0&F7Wck?94Rjd!^~nJfSrXVCHpi zvv;0_w^c&xF8zQptc+yt0P}zN@sF*omdn3ELOdkhNF+Q!34n42ka-ZxVQ_ei{k*iw zN}wRUxSTrjH!&7qZq)^<2BBG)?HM{Y>@oQS`2?WJw8nH0V-!el@~EA7RwYmc1kJ+md?Z=72f?zf)EtR z@-r$$8@O~NX8v7|J)=iFOj#Qdp&n))6M!NHu5_+|!iF9iUL6h5CIQQt2h4x{_ka4z zX0`ImL||vYnBa0}?Ywd$9W&k(Oeg6FJ@WN50J8)L!*g!OAy`IovvX}Pwa8@7EdYT? zfFR^r1_IiOGR*dqcaV&b#dp*|y~tVIJkg4kG}iK-_!|fvmL0(SQNM+ z*)z$7bYu3quGy{&)J#I7;Cr>X1yc7F@slbb znP#NRR5*;lgphp0*`GtJDyTkEf)FB*!Ue%_VgjZ!iVQOJjnXp%R0f3U`Lo$&J@8K^MH{$y=#Ln4&+JGdm4~s2 z!6YWn&P?$fwYOEElvt>DISP%XD{D|ri`CY&V{lx*HOUh(wCBtS-Y62C) z;!{-!E+W0gs1lR81k8W_6F>U)m2&Bm=_>t<17ncYsht^$yohNNc+7drIUs~gWg7T@ zQsnA46#(IJiQQ*zk6$dmT^A@@@+Qgb0I8VROawirZ(q!udXYirE1oMrU(tL)F$f$V z8o>Pd54=}>d}Hlb3q&i@M}A&_F=XM7GR`EE7Z&|7tOToj;gYncBZ^!Fq$(iVp5F;1 zFDV%m%>gcrMPe}HKsu82BQyNmR5btJU~&T9 z{y^Y+TLdPu&?hm$(fL<<2B5)Qz!a3j`;2iuwW6YYr4-A1B%1sNXALmf6Wg2rR1toD z(it#D-b_uTG^@{cgc2Kn;nrZr2TYO}k`41PCAa{dk`njExy4|cG||~N>jIUOxn-mE zT1YrLAJR}X5D5s`?NG8XB?72DR&qPY^(IH$4B0f7mbsBH{rWFIwOlIx6g?~1v;LRyhce|gg>4h;Bylh? zPNrkRoQU{&J3;*N)8+VU$QU=|>_x9#sL+^#UdV zojQYrZ6s_p1r`jTS(ugW_{l=M#2F~1$pKU@3KvB3CYsOzny|CFSrl$I>;EPdzuBna02|dAiKXfav%?b5qWW zO}9_8WoKK3rauX6VlYU_trr<|PSOaKtHsE$tL(7sOaSJu|JdJr&tgIU36i0Uxtkan zNeyS)kU0?!pld1P{ZOjD^{o$s6km;00EM21IbygtV0Ppw+9Uh%(o|+&-P65W0idm@ zkd}0uL2pcg8;;eM)j)8Ry>~e?fcc9*_+ItW>hiB>L`!+Zp_!PT3}^hYIT9fV#u#Mk zLZqRieFc$0xl-)$(i)zxEQ6#H$Zs|TD#qN+)PNVCu9@zamgEj3L;hU3T6A;E5_p(0 z!n3&t%wPD=e&C7aV)2uduS(+CTDR(On?|3BBMQ3>U%MbDUod6=^HGIO2u^Wn#? zvbSxm|E5Y=Goa2{jIxXw3BJ$xxD#^$lZQ92?3fHfAaMeW;AxFFlki>yz-j;t?~M}B zsVk72e}PB$1g>vTCW${&BQ1ac_+$})s9)9<4TO+d%#0F%DCTeVRSoKr;_)i|K(T)e zV{!~&t^xDce)w-ZvRp2Gil#OV=0qxI>5$;XvhD(RX0OvSej>n7Q^l zKJ>&RzoAK~9(>3$T?QYK0jQj%tEMjk&=(Nd?2&-BIo`CB?_shL;GE=Cy}Bh&!Vf_R znuroFNJ=(vt}b$|p;BfPXYM;nY5KMm&85bh!d_(J^D&@wwGcb8N7mkD?g8_+|NbW* zSt%7im8|aaAqK{v$L%F9o=N(639XE%R8}F}E+u1KLZqQUl3WU^xzFyCA#0li+hnN> z`J=l6oMvyXC$dy2C;jwmG1CCai7c_t54B|#YEAKgVpw*ptZ;1KoaRop7OU)|?|kCF z)ja(!A2M%8#^atfjLt?BJ(gK8Z5k`#$2AQ7^9#ueHmRcZ_AiA4z^7?+o569?8TQME z0;&U?wiTV;ZlgRPb$1j`{>Iatz!nh}?SyuR*jht`n)k2RF&+28#4oj!W zQp2f|<@U*(moAtp7_`w9E>}{!M*`pwLxX1)Y;HYOVD!7d8DT+oFTAh>*zL%}x+cqyQp#F+Q>|xtJH8+8XOX7TWJ4tSMfgiBK?ff?M)UwPT@%w#^w=7anK>KuZZ(3w zp?N?tbR8!#94oA2@VlSS7ht~s>ZMOsHT97cTgy)cx2BR*AOKV!Ca|RGUAMdm7{`(K zU|1|u)s7yoQ4e#Bo1=1%Kh^}`jEsRuHQ{GaE*uGH4qz+!(L9m(X!3fP)blV?R_``b z!9h@xysQjYC+eaCR%VI9tug_V-~A$l)yPjs_V2vw?ZwT7+NZ%qx|*HpRz%J+@N$vx zGv~d)h=9rl&^?MaN@m`+`gR^9W6jt@i-jAk~^ywDL?Yk6%4o1$(cZ6{426rh2R z9_=Wp&p3k^tT?rp84(OfwC{oMe66QXIg$VMzxenkDw_HP zQRbQ|5dd-|u?P#!np#dQN)gbifYppV)Ufgfm;)Z>SQC!`R_R+6&->;a=w<|%syOYD zIVeTwP;*v@95hoD5Ok;`dzb`r)YNC3Nea45iN0Cc4TG0PKwNE_Erbx&`}AH}o)@W2}~5>00gyr$1?M zTj3DEy(Kk{O;USchMP6u@_~RdQhVQpiES)-6KQfN8WdYU~#}vLBY3NBX3fG z+ZxUTjZXUa&H*$Ob*f%uU=XLuz)F;;Ikc4hOTppX`okd-=cxncPrvUe{rt-EKU4_i zVbX90EG|hP(0mB_WdWdi=0PToOeFpgP~8HIBY?v7)UYY#gr9LD2@_8LlX4OhejK`; z2Fo<*Om*DkpW)sEgxlE1J8&WQDq4mP?lX>LtC`rW2GghJMTVVETUCAOJ;U}eWdJ5W zd;#M46`3<;a{0}V|H!+ly7pr<>RGO=15A}*Fdi}h=)cwCj6cULY^7=ycmJ|`6nT-( zR1*^Br9dQg?!mi`Wd=0Z9+?ZzmFY;eptEaR>%XWowsbOj z3rj$ycDewz?T6G;oN(P+ewcwQqg4WFKyei?TalD_jzh2=k~a*}WP<6>YVITzmirkQ z%T8lDBn_N^Yr6t`#GUHG#y*;O65G-SQFi)O1qB!$z+?c=hF`{DDh#INqKxFkTU=mn zGPYlgB&GdJ=iZkgjKh2Z<}ZBcebu!}<(EnH?x9)(YKsG-!QITmGhj?Er93?FoX2eo zi-1}L0w&g=bR{wTP=6sQ^}US=v?ukKU3e0Hdi$3&rB`?Um_ze19XGLuD_HM&nd#}; zIA>;HC`0$|VRA}LTrjTKAhek}ef1g;ZPmMf8McQxY5k?>?tnk|i!_#)lgY3B=nwyF zNl~_31786amPhWKyOqy#0gM@f!BE1_*(PK4M|8pu$syHAg_&v`9UJIM zF8n*Rw2!B^+f%gs$=G*LhYbf$;#|UsoxaIXp`ZxO1DM2>!S2|pOM_{09!|z!2|!y@ zeHV%8)L#nlyI%}#(>E2Z{`HT3sJgvS{Z()Q6pFy|s@EEDj;RuFrm?q}g{T0uGh%|& zm7}ud4srJ&dgxIcregy}Yr6V(ZI^p`WOiZUEgaz*Hc^SD z!J5PvBz~S3#UfQ=h2Mky04%WU_Cr_cvvkC91z1A20<(>&^)UUakQ1 zAAaORpC~HIqoixV%9{Vu*>*CseNzvi%9H|-GbXV46SV{smH}=@QsN0NFGJSN(U~@B z0S(k&`V$ryZ3f4g?wq)ABz${h-oiczgm>bC#1hfTZ9*9Z5D50DhiR)oKtD{`u^<9) ztmuB!3Esz)J#2noYXqefum9!b`r8{3uF>Ox zNL}d|^1y?}{#8(E2n{aVV=lz2r+31AI+PI5I-Y*bsltJaho=m({in8I;~tKng5mAh zp5h%2+nPm`V4ncyz13yzx%hYRM$6tl1i0m4dV9f zCEQF~RJhF}=2e)AsnsgURlk$T)UC1zPlufe2|Nf$A%NCT+9BICY*X?8Fb z!U8{8Z35I8Ia%29{Y6xQKd zdAga?08mZ^w(&hwHX7Y>7cRLPk&`Ea^xO|`JY;8-an+sTq;zeYZ+oPLKA{@^bl zy1P@Ef}!$b?|ZjeSXlgMEQ2S|1I#mU40JU{KOlGia-N4sEz6mSlYFY@T?Mt8J%*oP zy)LJ=As!MfCSYf`IKga#D~ z%z=Px|Fw{rZOE7a94dNrAW!yS`5+T3#`7@81x#TafZzM_)Yhz_^3xyuK~_}QrC76` zbAac+;p>EVM_p1tkCmrrbw(nDp2kPNV><7-fqW~dwscFvPl6`IqgmY z0KDltZ9DaRt=P^T3lx0v2lvoG8*Ya4mdV81|u7U}`AuG70 zB~v0>cc+@$Kq8K3IUZ>Nf#3Z?WLenM0Q0cht}Yge+p)%-JF{l_oCJS%Rw+rnjtGX_d+S~ zrVW^^-L)<;Rf*T7aoQ|D)ASU_9$~n9m~)x@B!JQ?V0Wf_57qNMy^PV)O8{M4?(|}c z%=fDJn98t=4~AoHU&4ZJlk!LZOu&@`zqZW4tsYXjKs?t}|5I&DjK!ja6RAA&a|8{(l3dY1w9 zmySi~wsIQc5WuBFPdW_%oa|!)zzQnZ#KO?`=?8{X6rn*tcza;h&5RmL)+HLSVe=<>i zOlBe3MP0uX|7giGZ(e{g>@DV*;b$VSB9|<{tWS^Skm*2iwLd$7?jcT@a=af$5W3Pm zOyTw^koNq_pv4LH-br&aWKZU1%llG^&^l0ZJEaJ~T2r9llVsh7iG7@A{BB_p3n7He z6!5=sWdS7+2prrCm{tLp5@0s_oU&Pg>pYkK34cQ*KHo=JL9Zq3#>Q&?Mk2Z$DK;bSS2Ro0IAC%>*^JU@HUS& zimrP+g*9xKsj$Y~1CTNI)d;;D0nsSH6jlSy-7idRkg@^H$FFV>WASKOPFQ{tf+9V{ zEI>t^a%oSgrav_>D=hcIDaMo@LJaR;+HJrIPx$HDB%ODI7$$3dIrJHA9?gSK&K8D` z6W-Dut4lCD`JR8&+sE_^%ihBwoPph9$B9~Oy5^HNVX1_ z4$r6mW$TFIW+zNlwvRXzpZjdUz!6R(7$xYqgq4(MF+l-C4aFW{a&U-YNbOe8Pe01K zn%V(Fo#~kYq?gn-7$p5bG|a;k-3QeJ(@*m2KBhPs_t(s#^ov7qbC4X6R2kCZ(dniqz@?HDHlC=wg&d!m%9y-mq5t zh|Ls}<<_x)?!!4D0KA1^e&B5^p_*d&#w{tq0ALPGd`>{OB;9#TVs=_giz0;xei z;U~(o3Ga?=z|=A7{JFlqQfXmR8a|3ypdaJKf(tA@a0+dnLO z7Y9T8mI~NOiAfqyxzH;qArM+HhOgnMAgegl_6a5_Xa{A=rrq|dhXG@In2rH{`;Q?b zABJj=fUUf%ZUm1i* z+ru0M%nF9Ww!-i&>oHpdt2(v>@DGq$dZjM#~ipxWj5LPGjcU_B8%UP4Uhw1S!#qfXA((vE7e^>hE z0h`H`gN+7_az%`EDj}d-o_cj10XS5O@}^jV z=^r+a!bsQwf^+9jq>vN<1m)6C4%IBD4wygm#N!J}60<%wU`{FNW}2cP-yE`u27Dxo zv$*2^w{bK;bCV&lLS=in-qNT?db(|cQqvu#$$SrrC-`{ICA{Ic|2UGmGTxvvD3||^2ai&x!dEnXMInmm2N6z5I1`TkL&cicd)NZzlP<8Z z=#s7r$EC%~+;cDVYCs3kFdQ(sfcy?6gSVu_Rdx|WcS80s+2ZgyM9cS_?K-*ryfaik z%XXlv3Yfycxd89cXi~yCAOM^X*vGWsU?0t)auNaH3O4X69)L$R+m0zqD4*1Lc3}?Z zDU$$eRdX@5En;Xh75ZSy#We0~r1_@v)^`Bs2B>-kRJjP~%K%e*+`3*c6+%EXZh#*= zD<`6}`hD(oeSDNu<=8ORE`@rsG`f6<_81>FUGE&+ZtJb&sh?an%Lv zK`$%9(=}~^fz&9KV0-Af-(&4qc27c>*|Fh4qYwn?~S!MXDv<=6|Rft~-j?@gu+m`o6@2qI2Gu+Y(>L2Wq$#CX6mhhPbE>n|bP z`b)tjGmpnG5!LPCcVo5yrxW_Cjw!!G$v||d$0aLaY)OH4{n}f#)57p~!U4GVxj6?K z``J#?&;Hpnc=3%pAR@eRcL#s=&F{f+IEa99v4G8$MO;0C)uXEQlvXSzM6Lz2BFh;jQuuaM=WcXnJ2>q#L0|Odq8NI7H&V-$F2K& z__J?*4}uG*3PZJ0!p8CfE^e*i>iG>^Ik$#$Ys*+$s-apg;=-YVH`W4j}}LN)e^1gv>a#0=E6p;IC62Z(b`DR^kt!m~oGZvb~g!`4hd?3x|@+ z+nV)8PGJGiE5ifbJq%ZJq(iuV0+@=-sEaxRfcj z$ou5jLEQtGMQAvO#UTp4am-Z}MJQmsc3wbhlorn@0}e^!hMiOziVi1k?-p5lA#}i5 z1C;$3Q4@k?IgmlB&DMVaR5};5o>aCJRd|(PvT031u zPJ=_Xyg6K_C^%q*1E$Rhrk!qvtTcck6`s0F2!Q(8u>szKhn~L!a4Ao_fswxvpS+X!ORh1a895={Y?t zKb;yz`(RG1BP{?Jq@YV`JaZ_~yb5PK_D}4Az3cJUk|mebCj^611nF3yCv-(=>OS2**kx_;}gZ@7V%jU5I@OE(B~xOk{i5=0`w! zc;oO?0kc*p=r-r^o63o-dtv6RNHfXp^j1B>#5=ti%G+hQjaiUK&)nD zU00g>mo8vRoD-yZJxsrFEDs=CKcLLg48H#Sbv*OE*Hc}e?R?`6->*#AI7Y{3+G*Ir z(nM2y8K)tC8xHJ2(gG4-t(u&5y(Bl30PL$pclu?(BYOgv&KBYpnhOC~_5_NlR-jz? zTZoEqrt4u|dsG+1iXw>yp8;b$DN_95O4BQo31nL3v{|!b0#3%H>!o!srH*kFnusQl z9^v}QuoU3SN;6)7a@1Yrz1qu>zli`kyo|DA4b#H^_1Q0{J`WFGxC5tS`F{BT$G$(i zh?TJ~sY6A1V6|(&hBLslL;$E=1xVy3(B)F(6(+aOiSC^Mz5wt_?9-1Am;%cAzwHvH zL`6N)9Oz;}(;e<4VELJJ4|5KIG05(fkS&;H0$2mJZ~c;zETwwhtACyS(3i#q&`q;c zR1BAdPOMbq6W^uLaIE1Qj9{5dHWFU`^Uah_dbq&Q(e|j zLut&6yBdm62h6TZS};fyL7A15Bym9NtdP8!^u%^gg>W`v|JWQ8FsZN#w)vr0$EFIH zKk&q3x~3?_*kdK)X36FV7^krUBmnxHZD0!S60Y|Zz-l7X1Ta#(dP%$JY?oKzr9Aw#yb0;nUZ>KK684ElE@{CqgASPmFk8!=$+3x{$@CPw$guNq2>WvEg)`>@PQt_=DsO{r{7@p(o0`1i z@+GyXstEyennoM5LDa4xgMy%}pQ$tqSbiC@sd=};?R_~K0yY~i%ShPDyPI+WKLM(& z#nDOEm$0#D1F${H?^uM^A*DL?9M18|t^0WP)!Qf*OP~xGo`?Z^&%Oy^JHFF?7j@qe z+dvJ4gmqm6!XipTe`$>ZX14-3`KuS>ARH@t3SMN``3S<6NlUm)8rk&+;RJb&HSoA9eq`(;!%qpH;xEk8HHMc>2ZH@ug>8#49)N!L%Ldg(5V) z0LwICn%&83>_Tp$esdq)y(Y?AiykwvhdKnj^?*faSVa~0a1?vvU^L-JKzKT%P=4`Dn$?-%h@Q2jR{pZ`G+-Pd77rhQHr^RLFMycYwu4M?MZWh4MtT(VQPHOQOI4j z%(R3&z}!*diQ$AF;ke<@tVCY`w5k`W+Pk6efjfXkg;0Zf$z7E!LM6Pz6@k*q)f zP#MFWodf*wUpQbXqpDY=)$tn$*yv`CJtY`hw|p4CrR!I z9baBq0XHoB77m9JgTmfa6$R)6CYM8?JJ>jy1gKTZhxPG!-A9U>_(S7B=Gf|^KsZ|< z7O%};{KOv)cHt9=8_lK)n8(d_8A*bNNmr4x?kSG#jm;Zi(rNuA&?_m)s!K_aY<<*1 za3?b1r(+Q~Pd5=+Q3XhmHOvv2ouUN@Z;6FWvh}WM;k(yw<8xpA4xWGQHuzvviGsXr zhGMA<8)7Zw`m4%JTfF%U54EFP;AhCMvH>k=1a@-C>y?lU^`8ZKyu?4zZ=e+if6 zhcP*Z=d`3G;HJ6%D&A-j%=Y-)rVi)0w|j&yf9oau*|%QC&OsfFQIwhVlyoSHigKlf zZl?{~mRO_92oIiq1H{M!m>dH8X!-(X89J6w>9za{g2_`E&5$)=!-jntBo_qMS;%cA zn88%EMtftXY3isCmsV6nvOl+PmS)R03K?`uC^m{l1Pe!m=TXBkW$YXs^_FlY=D@ zq0#Q**_UtP%inwnFT8OFUBdzqMS^A2c}wLA45JIv=t>GQ2sCc)!Z>V0s}?=ax{oFv z#irLdL*OD-aDZk2HTmh^l%9t<6rq3#2dCXv$k9OEVs59Y145k@uspb3k_t$U{DH6a zbk~maDq-0IYDiRu7M}nuJU-rhOm#(KSk+`BH4D8kr+kA98I!JO@Vv$4VQ|VaL$T5!Oj_^kWSVF}OSc8sNphAM`^ z@U#ZA_t0h$u<{F-fXn!E+0NF)2vLRL3m|q7V?hO&mV;6u05M5{a`6*m_sdJw^qyZ` zEQW6o(^&KVp#a99+tGT<)p<&j_3*d0vU|R&Pe%md0NtbT#h^uSob+!mK50P|n1-#i z1i<~D*Ju%p5VCb40LBRQRtJCiomcUno_+y0-r9xDdFpRa({vCKI_=39SWIEK|Ml0g z^+S((!m=$GXv0JeUNEbnh$;%6dPvQ^6gMP0r~_G* zl&GcQ?A#N;ZUc5F^rsyo8*Nn!LXu*IbfFfeZ!0fQ&$|q`g?87(OE=%be|q|Rc=~&< z!!T_q3I#;dlZV*-_Ax!&I7ZtSFcmOtVi8U3gr0r{ z6|fPQX`(w^z|*R^8(5TIGgMb}*hJ7$Owc61zu4P=_7dVH{s{lH8K#3>`1nNK*i-c| z1s8gvyA#t;ff;jL=Zz9iExN#Usx*;cB~41JqeQJex9ZUKGD9Sb{YwDQWH}t9Ah7d; zsQW6X-~#o5auOnfY1z2()-JyKomcU-=U>CUz2lQ;I%6~y?h#ehP%M_v>2$_7B0`{k zV-IG%1HIzzV~UeeA?%}x3jw6-TUf;F5rDah>PU|m(Q6z%2$+i#*@rAN(jXOGQlSY` z>J3F5D)_m$Ev&(X%lM-x!^gALcY~@|CeyVv2Uk&8DWTS$0b?X!&KF)nuK{d84Y>{2 z8P#C=g=0ZI!u4Qr(k5I#b$Xymd*6c`vLkaYhLFk9~4;ZL7=6<>V%1zf*%A6?TL@-}m~_Rj0C03F1-#%SUXTYEpKvOO{VYPuoWF!N4lfH;=Rq0L!HwzN7NS+F~ByA!1R zoQ36HD0pN7Io(L&_l`-KusABJOj@kC)21_w6@aG3>w^@<_?n zK}K~Za`|@E5*Ufdc3*MZUdB^|0)(?3D^nI2VfK=&52P|{G1}l|8W3oLQzH%S7Z@gWE5EKCGs09N1CKfzn*g_Y8IL(kX${;J> z6kdHxbj*sd1E3?8=^V?x65yOe+-*C%$M^#Xu&s}P^kq4LsnkYyQDH=D?*naq1XR5`(7)1OS-22zxBzJjVB0?eSsA6Ng=9^X;0Q6j z9k*PCHYDAQGG~BUSi*3@6eX|090yPei!Q^DUzoAGA9_xkr%$*(2$=5nt_;!w)%&}E z+RK(<U?$wpwAu#huRTERqBkRUKg7cjtNAx$19G60u)xji>@NYZ*TByG7(g6wIuPAGpmiIf`36MmE?_rY zTS5#%5G>n4Ve`Y%yvtMp^XmEnE0l_Q>I7%=2#jG)!YplJhJl$7KzYr(uVA-RW|s~L z$2yi9k`0lr=@PDIA$lqY)48Po7FJR90OlI1P{F_^GfRdCBmUAQVewv|Ek%zhQ*E=WauA_rHhMQ{bqhixnRtb^%}mi+C0Hhdkpg zEP24vhBH!90VnOMONn3ag)0J=y1SPP;m_?u7lRz4+suN1B6-wgpjti z!O}BJ44iW{@qo?Z-eP7Jluq{2JfB$;rUUwj;o(mDZM_OLKo6ie?i_@=bOJ!z$W8^d zqO4>aWq7I!qu2M+tK){n@h4w;O;U#xOr7phQB`PqA zZwoF%Va{As|~Q;G9DUaq|C@HX=_A zFa^g9NKSz<5HK-6qF09r3jo)<<7pDK3ZQZh{tYIh3D-GyL$aByC!~@VjKuPJK(dbj zzW&S|?CiD@WZ;YO-b3PFh%qkV{-#hY#rH4-(A{gIegD|kG6Z)f0gBL3LgD1-B6JVo zI^a^`@j)J;b`5ZtJoA;{Lp0t`ZDOdiF%@)NQ%eB4@e|=3hr=EyFX{tkA3Spfm}ACJ z&VVuO_U8#Oi_2cSX?N3gNr(ZJtpG#mxCuWY(y<6mMhihw0995A(NIYV2Sfm|yh`}} zKX?I}rg(sKDvqWs&ITeBit*#y+_G_W{l4#m*UI903xD~wTN8(^(gMDTd~Ce{ zCFXzg;Ea6W0 z`yrs2Qo>KavZiC0xVLwNm*2bxQRw2o|Ii0OjtsQXPnD1F`zs;=U;4@$IIfTLkU1?c z8M#iOSVX%Oqt2Hx>^*`ha zSrHBhER8Mgu->ppf4j$zpje)f~^!Vt&q zB+uOs$%>Y5DG2~rj=<;so;~`cPuCc)#F9h(eaR} z_oad&R46BXGCg|K1Kg9hfnAHW;o;??sebFia^Vy)Y+dd#6i}a!BQ^wMtRZe96rD0;M{mXuD zNQE&7A+UekzzeV6!LzU2#LGADVdvm@h}674VIRM?2A8llq#a1o(1f!ac+_ie9N@dp z-^aX*UMNNbrU1;NHd^ah$kDVhlzMS;mNg`f8bN; zGyIGqi``A{KFVvo-j_aR&Wx_VY$Yfs>BAi70*8$jUUl`Z7ytku07*naRJw5&&%S&U z&%bsX_xF!r+1zE(2{J^Ez?EyOE?@>uaEf;)q`DbIqT_m)0rvo(Kw!W7CttdbR@+Li z3yGw5Uz3Jq6-ABZWeNctzH}E0m%R6ZtZJSpq7LMak3naZ&H?OV9=<7Qq4{ zXv2U>V2zdB27={GGc~~Ma+5m_ z=cKCHE5a-TW6-3Zml{l_0h&)I38yQk;LlIW8-SwupPyTRaTNM<(8KtrgDMg=D0Qez>^6^Jh>kt3v zC2%e>3GhsdCT~>qLLnS5g+Tq*9_)?@MN@~?sx}<7V4@rVm@MFCIXD`FAz7|~T1zv% zKIxK%7E`e#i*O`jET~An9%YcX83l+*L$s*@=KaGKEYq}6(34qF037g~S`UB6#En%eFNK9$M zfIaXoSZfKex18hJW9vPP zlc2LaID?TB;dg)UIjAa0c%C#NQvNN8o|hSAP!C^z%hR<42&c#kl4G=cS-$Qau=>)_ zdzB4lS;>J?3?B(eH%A2m>HfeN^lwE`VuN8EioDbS^B91_SbV@F_)<|lRKOVamga%9 zfC3nP(ge)f`4BL%f$mYLQN45j2>13HnHh2bxN>PXPE@GYaGS0DI}c?*W8ZC8{W4J7;!2ugizE-Y1(=`cqd8l>=G$^wBD3iU1r|4l?t zdpR^o=pMt4P1Ot^wcDl$iVgenrN$ZEIR?fcQRn0lN%2qkfrzYw9B+o{Kxr-bd#lwW zO9+;4zVa5jmOb&U#0|^px`NBw3khot$M828;otwk3$UfL$%`?*&LAusa2-w8L-(&5 zxAws;Z%Dff8z!7Y_d68Ebri7X;#`;~8-!z}kRE?*?|jM%I}Jj{@Gco+LlFcSpqVOQ z*1KKP6YvflP#R$Sc?f|q5HM*z9$hK8A3skob|1_HfvM73kAg2ix`(~}OaF5?g7EZr zZ-G%vl7I;fI1#Y8Si;g$Nn#R?|JWQHb@BNxT_5XtX3`@KxM#+cP*V2x&M}PRj_3Cd zI68>G$TQ)fIglYsRte} zOh(iJz++<_dx$~N8!tNj=rcHr{61R6zZWI9-H+5A8Um{4!w(tle>vJD*R=5MSMRy? zl(MlhK(;q)C=}Dp@DfD$^RM2(y$8*yX-i)AF#)&4BrpikG|;|(w8YqQ?A1Q0iG5Tljs3p)iFDT~JW)%ij_V+0Lyh}G)qXz=vxci!E0wx2Yn{284 z5Q60(Fb;l(Jj_XrMV5JUAyNnkL2)CTv|yauQFWjkk{#Rce;M!yLIAfP9O2$xJu{C= z2;l1FWfatOH>^#Y;}1UfqWm^q69HdVVOgI5j-m!8|2U?N`prF$evpTRAY6{ofirNw ztg)Kxk!65ginF}I3b3Fge~y@(gX z$#LFX>|5wl;`wNVZNTl@Bk}f&%i-ZzGray11U&QN9oSqRs6_2!axU=5wbfK7r2z2S zjRQRMt-BM0duFbn)E6Lp=ccL!dn3oMKk(gCt`9YW4wpj=^Y|*qYdzYi@x8h{WzSl~ z+s|T*Wq6le&;IdCXm`vQw>$sovnOF$y%3K|ZnMToZC-|OHKD}Rw51>>Tlm!;M_7VUzO&hBR zW(@33Pc&6+C%VQgc$h(enC89fn2mz0&~Z}(GGs}9NeNSd@>a;bFralWbdVg|!8cyK zJM>D^cB*t;#iN&&QhjwtO#`3(4=?)G7G{l9dDzE1Q5nXdD2lIo)^F{>@yV3#!i0n9 zEMp4}8Uq=!WR^gkg}GaN?5ZVswr9YO=@-?34v^8=u>epk7NwPvWCfVK)o!|qvH0W~C{BC7sU2wZ>b5W7cB>HC*qr(0YoVtKum+UiFD z_{vvr;@*Qs2K%x(W&H`cj^^iO642SH!)kVYfRMvLbjeW*1}r!yZ_;h)H80)ZPo>TZ zuxNtk@=fXZ$(i~!m*Pi_+;*3R!gPiOh1&dBIN}bLjiLR_I34;6}8kF zOaas`g>SMM#{ds0V_}4+zx(DGeHSMKmvfsnEY}J#tjU-_sxbW9fA=gDMNXJ`p2|xA zm-)vh9TsN2i|&5Y7p&uymbm+ur=4n)!_8c_{+;w=kb)-Z<6qS0T@@~>U|RTo<>+?> zpRDJZATFpC3QZw|ooLk30;{|OW7zP_{9;tNNjM%w6mA`)%sos}f%0Z}t#4;19BdfF zpMU#CLSR8~Qc0{y3OsUk1w~zvXzGT~fBlVpeDm9H4Zntml;y_{Lm6XGRPXpZmW|f^ zW8aZ)MgS&(u#5WX;)?{7!*$4`>d#3+5CNPR4wYhJFEa2@jZnC(`2uB-cgYy@1x#6> znW`yXDioTW3p3HEjk~upjlIPzWL{|T^u=JLI3X>NF!fKkV?*9~YbW#^?Y4#Iuix{X zG-=@r0eJFl8z)So()|X7;kSS1*-V}#2~y>09}|E-RUQ{;+}igA!$xGLtiT=yyi-R7 zYp$Z#)iE2O%P{$GPbnqyB15G3hz3Pxz8+=JUZ$pn^8@FaxM1h_xNCCWO|-O#3dznJ zAV!AKkdyGuB(o`q5)XhFBrT9&fve}kEvnN6%zCITe);wuc8^+_MgQV62J}1da^4Sp?=f9$#@e+sOENHp@Y-Do2o7CY}RBj zEXzi+Wr+xlTL-?sYr_Z~oqaTi#*ZDXyEbmVYD!MWgK6ln30o@>P~p@}-~`*Qse0Vg#BewHXLu3Syn6uQvxw@# z4(wV&Anf3Hc>nTfeWuJ$(q**`h9g#-=wjNcg2J}u{xd<}%f5FhGb?uV_*4P&xYafj zwfO1-=9vu4-Z^-NLP%$NrzHM@B6jR)BpB?2ysv z`1&)q@zN{1`F8DcBwmIXfzD0?PS^JAS6Z-P1(cQu2<#6s{BQ-Vo*iILBd(OFp|sD% zNC7HO7C}m~zL%rkWg0b@se71Tzy4a6gy<$3c*gM1r|u1gpw(ITwncPFiHt{7bT{EA zOzaL|H9`-0{njpa4w_kv%84G8oScHIAQ2$%tY*@21HV26@!8LV5D24;DU=I$w_UdN3Hko1xAwF1;dB@h_> zyiFoXwUi_?!0fi$rUKLxdzcRkUdGv{oq5s%0<>y4h{=%RYB+Z+02oKT1fyUZ`i&Rw zz_Oi410JoS@s*f!;Hf9K;I>zkXZ8eu>o@lC)xUmoDj=5n*;6Ey7;X9GSPt3`jy=Ha z)?)hai65a22jV0nR%tGS9DVLvOthGeZhs#$fjVo83QE_C?s!rB+RI|G7)XPcl(=B3 zfO-A3n>K_vN@ic@a1V2m1g2RJ$&wNdWOi51dN`_;7XWnj!o4vr@Qvqh#pa-tWypzu z$DY^-_~H0IgdpJe{=etYHSBSnt;~WDc@w|#lIEQQ-&^m%^nGi)7>;HrM{Dj&nJe4o z{WwH!J!Xr^tK#0kd=9=U&c*zDqk*Y3NoECVCnzeJ_1scG7$7Z!*qA|FCX%)bli}Ars0v=9N zVkiCpC|@a{e5o)5QbZK^@4*Jq{l6#aOft!_sjoeornN7ERyMwGnoa+0=cxvC)_G*L zYRJpxZXM>NR&U{Q^a881?|PXb%jLiN&do&2G#R-rLI}L)o!inqhpy$|-~4Vu-q^G9 zlA+V71KF}fgw|U}zFl6rusk<%gf=Xk?uE0~BFHLDz0q@4(qcL~q(?(K8m9F?psd6;1l=Q z)Xi~4Rd>UUVd{Yb7FEL z!aLuwCG}#KBk_f+0@OkV_SO;gqdu#SyHPr$HeP1 zT&=~JyN4MFWM(f+I)SxYxD-u%VAjKvi-f?_FWyGSu%oY+*cgjYwOw5<gy%*iaYS_TSB(QDn-{ct@|7{2oKb!bZR=`bn2JpSk!^pZS=AIlN=*T3^EpIXux zz{(tUFHse3V14JnIBtV_J!SeI2YhJ1at}>7I9&*`P7P#~F;DXUv-jQcbzEiI&p9)< zs!LX}W!ZACaf_2U)lQGIBtSw!@1bmVS(a^l@bOz4_7k+i~x` z+mdCg_p4i{ob&xLSJIVq%b9!UHu=84pCOW_oS8Z2ea_pSS7a;hr!suw`ePEApkh@q z9Mv}Ac;zsN%Cc-~W0`lv1pu)7mdF(hi|#W~Kl51_Sc5In;s7H7a^ zmraZ3v^52!ItLzoVjluQ&CDn)HR&c@9FtIxVSPjh0zE?$Ht>=3csf|PL&@+bWRUx& zT2?BOasVd7QJl!~lCtF`aL;fG0p(cxNt#gqnrzZesvw(o9+{TTRxcRyK$2oiffyF% zr38%ewlgF*hbAQU;y5L>#IP`v^&Z%Y07pgQ;{v^L>F_`)b{%Rq(ay_c{UQfIqMze% z%2+(FI*DB?iMq&JJBIMmE5}p%Y#iB-0wgsCiw8b(IYJ;yG8A102oUJ@M4i*afH?p^ z6hx4;a|&so#+sq!;r@Amx}Xz^sue{jZgh6NjM5SU zf>!iJbTlEL{t^(yng8WsNs4Nd;a*aS;_1@J3QI&v5c%IC{VgXIaRC78QIswKOn4>a zrAyYN|3c*Od|za?qWJHNg-mG2$jWXC6i-7!cOBD!U|(GS(tt07Bd0qup76psuy9^A zN-b#V#W~Q^AHdVk9U5KWSY~4#FNea^z5`+eP;Vk~K3)ZN`&$-MH7i5ImJEZF!rZ$elO{6)`(J7H3Hww+CWitL( z2}sw$jpotGyd+x*U@uEx_HjV<#_fi}0i0^?LTA6(c3!E|%5l!IWa(6cC?VBpP6___ z)INB1;mwcXUwz%T5bF5$P zLw%(N&WVt98ToUhyVi_FID8GOEzJ>&Hv`{+IjG!8%oJA=nj_Q4VvEtVFDPBlkbzoG z$sV6{o%7^r@rvpUK#s5FBIxj9AG7uFc_^x$@@z3{R7n!W%B6LdSc3hYAfEiw0gKJV z?5@6CqRAtKfQIublp%lAV-;xVz+l7>2(+LI&)J@g?E7=6BD>7ZaL<)qOs~>MmZGS2 z84d8b$ros4JFoG_X9SrX;1>aiSEv(`0nju#eX>#iFXb_#q|F^ap@*|1S$+smQlD5m zat;K#;vS-EI=1g`63aWXSm_lPIWTKZwIxdZxtETht=(hUm~)dRFT34KhWleGL&2Ez zcx~t(a~bc&esrEVHmRFMkC%oj4fn6{qNz1c%zRy0+$brDw+M7K39EsJ8$}D87aEL9hsOaNIopnYk005n4_q+6 z1`dZUrHRM^yu9%Q&NlUC(9+8(TQpFQ2NvHK__Sz!HWx~Q_+m4;;0Are|vtj}!F*i~2Su$y1 zTAF0V1uRS@2}6U5kre=dzcZmC+_K+VMx3~hGwzS8SJWrK80zNJG!z3y{1aBf6BVw=73=Sgc_bJ2`H>EQlFX^wA?p z{94OMAk%ey0$^F4v}5M@M8{>sCA=&U#B@Zv~7)3NnHlR0;pMao!~C|0g&02oi=dSqlMue^Q|r_OZ8Xb_z%$TzA) zN50L7avVn;2={lqYs?*mw2v18d?2>Lg zGRfMTPn%4y(sBFpAWEF0A1s>NHQLYP!7^EJ69rhSuA33S?DKlj9|*QNi;HFuBACr1 z$&()t6DgQXQsY_4*GuI18M4EGY3iOFC}|KoRP`GF;^1j}mj`ECdn3Ry8P%FxIYw2L z8}nvWru52#8pF?jwH1;S9q=<3$K>OX&Hy(mNst{*IEstlDl3PpyaMjZD!9rj;3zGH zv!oQxk}^=64U)}1l7%|rfY4NM#-J-9C_W!TKCkir9uNHey$B2rBINZTG~_|Z=Yt*! zf$5r|>{0=!DCZ9UN|t3XRRh;p!h7@{y$EF}2;J5PO;tf-tcQG5YZ3)k&rz^uo*GtB z(c_h|Vwa4um|&TV1)0fXqn8ad6A=weX?1PZ_?Y5%6 z3p?Nz%qsPFB~<>~4xfjr>5wwXD#Zap2^KG?h0A3Jbe8O8@Zu{+(bUqP{)X4lUSrrB z!5IUUB-o2fP*PKe@|lgOYMh1ghM6dxT92ZtDR7jOKz2AmheIr!8|MzAJde|&BqDQ& zL@<7nu*;9@Iy6N=$UB6&voYerMMP;WA&?yo$aXu5DyLw|?0F-~P1jWTdVA1zXg^NA z^(xv9?lWC?H(}34DZmgl>1WJ0Ry1_&Z3ZC(x~{?J>43AiF7NmM^QY=qw?sv;)5r&o z7oQvtnw)cJnwC`UV=jSa<}6IV|18Q%$0`aEcXsA5+mD67n8C}%^|9#8y6f4C;zI|4 zk@REc0gLO!j%SLIAsgofhC(WK9c_u>%1rNTXN=>@t7eAdmr1nnBEX9qj^kW&U)p1@ zgb*-IgY2-QX3=8Ix^^w5uUd`rh8eKAiwq^gqXC;aFpNp$8*BZKKc0{Y_otGKlA1a! zxMe-&-*_83PaeaLhkt>#BL@>J$~c7iln}54YsKF=h=Frm;h_=?^|xb6{ffNZ>Qf5b zv{c2?89Hdhdl89O5<;M98Z=EydJLIh@DV*WQ-DbiHMca+te?t=C|Lrf#y?%pvFVec z%crFmCW+-I4A(?j@q7XqvOokao`Bd~fP0Fd`PBn(E#|Xu&av-wJNi6`x1;gu>) zjOOl`^M0hZX(p0{x`j*ef&cskj=cOVcKrUAPy>OazOp3A@yE}B&V9|${2>sDf>4UV zo{PvyVP=vvxMW?4W@!ADTjRxDYs4@U4w3-A_W18iqIi4z$+X7);z8)rMN?sO+LE&9 zIe?d6JB~Bw(olEFIb@d$wTl*G!EJY<@tW&UG^HAxF@SThaC@tmELf?6W;`H`2AU@B z88!_84lKRN7#iSgZk<4nK z6fWYh0juX|xMGeDSsMHLMSzkq21QX)c7vyCL0Wxm#$uTBr`2?5s^+y(QY`ePhZBF) zbPg*=fHBs&nMx9{bW+pAu|`w0ctor-31C43AdCP2AOJ~3K~%5@1^eO~wmQdq2by5k z&`H@44d46PYi5D!@h%X1R0G}+e)s6^ZoU=sZn+&*v*&s(0I-Da1@t}b!o+G6J`deVjLUu9j6-46dcR+ z6{~UOCmz7|-~K%Mw}=tPq?BT`GLDQrfdhTV+u-jR0v#bX;P4J~WE}*B961h-wM!Tl zPiNs+rFeId;dv7Zg@m(UQw7aP;IJb%((Z{#R0Q;nxLgkBFaf(8^5~`pNBu7#CgZo#4*SJh7h2t(vA7Erz91> z^!OG0?3eGsY&Wp+aZEx8>MmP`D?j%I)UR4Sw*E0i%h57R&@5=0xi1+tahKk8FV1Xv z8{MZ)i0>;24TIstO+S$cnqE5;0hWdW4tRT^s~V_eLoNy>z~TmmbxRoBj$H{Y=gOD>I^cLZhWZO8+GYNq)+hZXlr4omUfax@nwc-iW z#6h}LkgR~~K%ggK$;Z2U&t`=Im2+V6!djG;I?bO;fXANNhl_24MrlJb8LyIr+Qo}; z)fc{uhAXbJ4tP=k!MI64WxI>8DH z`8`lWgK)U3az@Dvk77zG$IZ(b8mouhuZim^BmbuBIzpk4Wr;oM1WhZB&0Nw?TN~>h z^qj6JE@og%FjH1aPn)lND2U3aOV&aNvAGftoP~+k6Fr}!!l2j_8K3G0w4u0%^m&6g zaH`d!cV_PUFvhWJRRioMlZ`kBdObn>=Hcz5tUf01J!QcHT>h!gVD=5`KxNsmIS4Vn+Td;Nn-F8x)F1-Bo-knMhWc{afXnA{ zTrrQqA&-4giMopz^O-?a)wCq`U)h_hiK-s9%10bij=As)z_Pan#wNlvJwS+yMNF5{>vGwMV|>nVo;MAvl$0)dRgDsu%ihu=Xa z0h3h}xth7o7(~lUhTD84`Y?G-p+RCQ%KUpS61FfCh^{97Xp$Xp*NETR-O9F$}#(*v{-9qu49=M zYfTam=Nye|uE+6>F9}&n)Fy$*6V;a<(s1FOV=)vigLj}a>&w|?2X0=@v1mF+q*pl+ z|LgG2oO1*MfwX48S^=7oet>`Ms3-Thu1IoAP`{ZTBF ztFD|0Su(fWPMqn+vo9VN8l27L#+6_A67K!=Z&5oQEaU8{xK(>C3+fD$8Vez*jfD`n z%F0n%H!Zr-9M^tKa@jy7I(F3&p!vyQ10TAEVg0K3U^(8} z9R6=z*WvYg5eNkG1}w*ep_RvG)WY0+__+T&Kno#cmGDWDXlcnLvlt1iN$Jm|P$|sF zlW2A(08E?P=zS^rqP%T!zYFKU?&BBX@r5Qb{KSc4T1As5%M{mKHA?^yB6jqQ<5v%D zhi51h<&3fSsb07cYyaWvsJm=gQr1`2;+Z+Z1VkuB#f+KgJ$E|s{@v{WmFP&Uk^oSB zA;TRT=hONIIy0)m95&#p`5c$e;o+nnGkXXE#u$RZAVQ%~-T`GYmZs>j83oKer%$t< zp`kOyQ>HM&xnN&R36sANGWTwu9AMf3nrKS##1^Kz8lZxn1O8}kH$Te5Q3#2x({o<^p|jyl%@tG@rIPHc&4dsNBYLj zIY&v&Q~_Whu$MX~AbQV{ix_N*->}^0=?-^$k<+R&IDk2IhWm9&X>w{rQ55+7{+vtd zN!8M{BCaWCdhmU|z{#0YOngWxrKxL4jw2Gy!ry282NI`vls4ak#2W#@r(`6u|j6 zk022Rlj8S44S8U9lv=*HZ4$6_2FLYFI9zt~=MPibNT^3`(OG)8h-fSZ;z4`jI&nf-g+z6e*GJ8mX@V%eOVPl6a`X~zqhO%SfYCpg1)A+ z6EZ`i0j9gIY_!&rbF^+bfk4ktO!l8)Q58Rez9AHqTD!2PRdTFd!qHHjoXXHN4Sv5r zrGAx@6*QwAn{mhAb6ahkvQ7c(GES!wLV+T|&LjY! z3;|mFzJ`o*yuJH$Ol!@W6&PE0*H0_M>=_keyIKM~`{H4oIMp=~-w45~&wLiQeEYj_ zmX*bx@+1zBr1m&T+%xsPZOl9=%esGX`1^X$ar{U^>xy%ZqG@HLTpzN8V~=kGk)?#U z*EI$Hp+3u|oLx5DuOGgSV@48S$vKD5=flv@&?N&i!d9&GAH=e{PP*ePc^e1mN%FKPl{?o^J?+{|#rTn>8@K0-xNFgQ4v_ZhHO0jC*& z&A3bUtjB{+pYK?y%XwSOhSDUSg_%Qun9hrnJoCvCB1SYY(y4?@)JUbnt*=C8Fa!ME z@jnD5*t+i=LL>EY$pkBtr^(ZGhMR9*2xu(f_tZJ?$RBs3xut*1y&T2GxaB+F!R&Q6 zT9bHVW^Kj^Z-RaG3`#1I^RVw;J~UvAW55pF{dOQB|_j6{)3dROxYX&#zYn> z&zA?41Obyp|BjLqaG4;dR(*itO$b|W?LM8gg;-MTz~#&8Bl;)unBzQiz8AlLY}c5t zP&8!{lH28YD(SGzG&TV-Y-p&pBUFiXzzDc5ucK>i47dtrMnR zjJLnT*m{{oIQgWWU@(|hOg*^@nprX3F1EFwnpRmJv;l4*#Z4uHggsp? zWYTWTkz5{}H9}>98cZ1R%V=)YqPoO=G$SS0o3N*5x5tk|r`j^K;>La|LV#sUrlGvT zo$y=goa4WK`Yr}N!I6`TtE+M6kNzKOmn=zx<(NiN12bb8&O{71WoDX&;Ls5KeLe7Y zbz!KZ9YdWR@O5{=*Vluf#{S74;;kQV~T_5C{aa+J0*? zfo4_!^O>#No3FTRaS)ulg#dvNgYn0TkDk-un5SR~7(@diih%1;lr;g0>&>B)zdPYk zM^Cq*yMM?Mo+z`|&~=9EuA2jUf(6JquxGd044{}Mitb}Q1I2uoN!YE(#_Nl4m0%>+^@-l z=CD^FCjj$QcQ^Wi!6QXB+hQV`sVmziCooPHk(^?$Em}!Q@l&z`h$C)NKdlV2W>v*!jwQhF9^HjAXANq;8SXxMvr-P9BH9&nT-PVFC#PKJwqDm3xNirKwC&KCc!`=Q#7s9)sBj z03n8pRzyPnL8zf1>@h<99-`xz?87Z{DZV(*5%v}vR&uo7l;h=6tf|bjwVAE-Q)UM_ zNC^3ei7k5?7DxdYt+OzlVoGd0X#uqX?pkyA^0vpl5eIPYVh_%?_GYCrhjZZa71L2( z;*2}SrV9gj==a+}2!X4j0=NIif1qmqd@-QPLSM;vV{5e8ySpvAGl)zP83Quzn+IO5CoxYTUFZwSSu zW5=n3<0K8B*%rhX7TWQl8Fu5ZoQL0e^tM}(y(%virk-qrX4dL8jx{wOs9UvyLDvOI z*yR*5WedQVcGF50AT1aH%m{_ysti-=iEg#jguO2T;N5*^p{RNc!h-acmke*aOf&v~9yPjR4f(KJXd8KLMx* zNIrNa4c}Pm!tK*+pqSXqIa*`q;o3l-&sQiF$q;B}4KV+_dHbOoSFJEX!XBo`i|cME z0Asck3M4_$8}Gg{mFxo`&>QZ38T(s@IPk{S<5B75G9jg*sSnLG2ugtOEpuXBtqfwqs?>EIKA&&WbQQ^U(99}e zp1g3O!|V6AmDugm#fnC$!T6(HBI(hDT<@wO%)TL-#& z2XXjJ`vm=;sj%0g`L&oiwKV3vyg?QJ_QN-zGvL~P{0Gdr`R0T`m6>iL@j)}t--o96 zHskQK&!GFn@o+gv7U9sM51Pn#KE$FCN(jgo2Y09Mfzp zr+vpyjMiSF7UuAHil&B3Q3Q7ex|T3I76jP5-(dHVhuy`AIDM@cqJ;V^T>#W~|Z}(tGYKj=%H*PQUp&eBC`pR_jPSQe>{i zKFE5vto7TX;;H43>@u2PIT%6MZrsNVM=>D;#|Bz(Uh)Cpuo2*^3mmw)RvP2#j%QT@ zMr~y`-Ulw2DQmOk_uDqhC7UnwctjE-Ef}#dhc(f3bDBHY z7k0Y-9?X?m<)hLf7_$0C_2_Xms0)^zBOBFByuu8Z4h^DGR8>MbB#Y_#FJeK7+ zW+vEzIP#}siDVZa>@aab=?rt~R#yRkPr}2t9&EypFDOi=Y^m<%95=6<2iZmq3v--) zes5K6B^JYvx zQ|WLlBZ36T2IEhL05h93dihjNB{>8K9B%C;IRMubb1yj9Z!r8Mum)b)d<2wQkR6*u z98=dB)~{b0wL8h6U%`L=H~69*XaID|^VUb1o0vrMNtZ1SpZDn>36sKKYq(i z$3Vz3!7V&svx`yW*m1e zu#Ev7&Vkb{eRy`~AlCiIKaVBswxEVG=Cj1Pc4%k_dmjERjz0e!6t8#G6`ACV$%Qy( zItC!S?C_lHPM~YJFkpW8!ym@2x86DdD2IO@?~c`Vy^!Ej0L*c!P}BEu#+fjutYkCY zQ9Um~k>!b%$+=h`%wf$YyNrY%GZOLuS|Fjtv~l|hs5;BYR~oOQ8RNM9_9Y-}tUFdC zz<>U1D^~ygH(@U>HaFF*%!CbRVV>T&5nF%yWB9teb8Z@u40rOpTq^rF?+T6&t$XN@Xc?26XoUQ z5uYS>+_C_cxhpi=19;^1ce=p&#ps%Wj9p;EKUz{=LgM_(h1HrTx`l+Te$naXsy2rZ zTo3oYq%pr22f>;1J!op{&Dv|YeB}&ORTM>x325u~;_+QUEd9_2W0twZ-JhBGJ&*Bw z#qY!J-#&zAzVHAp?A&3vgwvJ%%Co;@vN2|ZFE{pLz4OjHal;Kai~uDc_o0)`>90tX_5R%{@H9C%nX%=xtpkWCOC3eRG z*tG8qLaKOMBP-Pr=Nvb!n-4jH^+o3dKmN@QEPUX>ag0BygJaxhA|qxGx{e;jb6@%r zcK+|Lpm@D$eKA>A?^zsx(HArN-`s9DzW(*EgE2M+ETjGRFh6X88#Z?(>n_<4z1%wXZGVQ9+&Iot-B^(@~os;IS<&b>Z4Ivqv)@ z0lc~CBwFjPz_R-K=$|c3JuW!_uIt$M$nUY|;fJ9KQmEyETQ(Qtm?F0zKvcFL#uy%a z@Ih2nRZZAn#bWd+^s+2im2B>6^Nu)&>;7iQz z)80LZLucAjFf~#;XXUc#Xl$q$`MImlho3!p0t@c>pt-#cLCVJuw6x&)FMSa^e)e-= zu$(NGUedQunVXl4&3+C`V`C#e`q7WZwJIY)v;dX`z!Z{Szw-JS2K0$fP-^tYoD7oh z9%D&P-++UCfEG%q>^AQ|i$F*2XVJEQe^!_PE_Ju;czNJ~2T)X06c;Rq|9jYFTaW@^CX^>PzTxrs{Kq)w zqG@UQ!z-ICF!FpMUYFCOoCyJj+7e!y%M>radl<5movB=0+iw?2 z@&SyR%YqaDQ%HOO3uxMQQ{&0i&LyTT#uz8$%Vv|>(_>*W&1e=KPfu~6f6$LzN6uT2 z_{mNGi4b7vl4)qDFE?6shBSQhpI=1%)mNdYraC1M6#e}`%LTmf;9ug>~4mPQ4~@gQ0N%K~7UmW!?JJD4PiJMnF{?6@vXhZU2IL*|R( zFq`!%D#5C%9vIM&7BeGkoBEmw|E)od7@luQ$=$(u;X_u8;0svkElB za_-%C@uyFI5*>#Q=M2*DY|mYuoj4|m$dIn7slnZM-#sBSHWqLeT(JefG%de;@zs5d zGrzc^meZJ>X`!WV>zXG{+)x6WhtfCoUGVw5^lYDAvl1|+s@&! zr*^|uT#UNq%aWUKqCl;w*!`Q|V8h@2Jwii6>3RPJx2#D;I;u+7uV0VK%E}Q?jAm69 zz_I|CDajw-*)-7W^&K%6$Fv~v#}v+GFk>|@))5!4!8B#MsX#EXJGQHT2>Xs-%!<+> z1X#Ul25PHI(bFHm_y7GhD2k4`<`H=UM4wr1O zAJ7t%L{Nfl2hL&87c{4kd6J5M+@Ca!;Y0VVf~xBH=`T0o#HmgIKt*HYSe!HinhAdI z?dZTOfAhCEwc*v=N0mzq2M7o#rC7FX8D`I(Jpml!xn>Je0L-Mua-!+{CPf1Cgtwj8rW=_GT7vQigrylx)0>^O%%Jic>82^Q7W zfTw}kr|;ZZJoDMlqy4~veDFJDeE=DcV-f;Q({b;;_d?foq0HEV%Lev-Ww`UON|(L&iUR z;~D4?RA#c>9{t1F*PgrKCP1UKAp!w8d4 zJc9Lt6fDe?<>;9vPk%6QM0f{AqzD3oNyZt=!{aA{|FULbS`3)M0f2=Ps=mEP&ZE2E zo1IU?Ic~dcDZc-&8_>}?gvcf&!GXaTZdj8o>4yrDHC3BHU}mzHC~Pjq1L-(eeDUqC*#2D+mC}W zo=EK`@op2xF>9+!Ffic5^DiF^4|UXf7-(sUZAF;a*l^Bq_{pd6&UgRCuq=7LOp1tC zbqUerF~)H7%{M2ETNbR$0$^GuOh)78C6T(J~z8|17A5dWW0%ER844Qyu^SAOJ~3K~yuV@SBIXK-1WSYxJEy3oQ_*yNW;(5TO)% zA9@&De)uD3!BAo2mIvc@Ih|O!az#R`vS3{n0MklgE|3EOMeT_RkmKF0vMo%+KAD6V zF4+;<@FE(968p8i){l@twMiqk3l4m#3vuNRJQ;4 zr`Yk6{{hp?Gr;gk1bo)JWz$!W**I$!>gwteQsEUW%mQFqDnEPSr7o50$9PnbjP^8L zg>8^V9y6P1) zR(z3w|GV>E&2v1pJR`J%7{KwHSPL~}FGD7(avEC6X8qU~Ez~C{yGd7`eV&`W3G*~# zP?Z9py~6A@@Dm#RX*|=uqpCuS$gxbzRqE5cDJ;gYyamhxDPdr~<-hm!1ilj&TRYhh z!dr^f$%fSGb14V2#WwwV4YDP_Y5xl+28Doj2ZP<&bf@w6a)qON{YWu$_v})(Q#5h| z-iDz0^WJ*pGh)Q7BaTXFr$Ap}%3&M5_AYCmxJ>v1LK=$2I0vI?^$XuT)Gtx3@bVHF0A&(u~SD zGTXo2eD3s;l0aD_!_=L`IDf1DKFwpBDQ9VIrS51Q4vC znCIF}gR#ly)u#z0qc=w2A@9Z|LyPS#JUmeX6shh%XK+jEm2%lsRnAu!&E#ZNOyA)S zb0i!q2v(-lz`(atE=kQer$1_PV}HZvX!w6nt;S10OAk6yT*r+r8CXB%SAC&Z4F_;K zD;Cd?_Lm5jR?nZ=stgaLo(nI7#N&j~wf9|zYmb-FOdo#-G6+>6Lq=LUPYN)z{3`pg z_@KQfeHIwEtG=$W{mm*>|`~%;KhseD5YsRrV^6fihI?}K$0h~#q{nJF{C&?M^#!q!Y+FoAih!%6?228+Y4m$&lj?~BF6U{sf zJ)p#L&ad0DK}kmC3A#ft5WL=E);Pw>^*p@MqvdGPXRszTS>@0yj(l0#SlD)CK`4Q* zk0(4{cvMx42>G)in_q>dVW#(zM(#x zS?83!D&2;@elmhM?q(Cyqn^<=zFOn1`rX;436`@uRX*`^+5U$#E041_p}=Zr1&ml; zz2`|Soiy;Mng?nD``OuTw+R1 z>kGOvS!uFB&bvD~8Q^sSAirX4yLT9tm6!jt6U0gIr^!9IZH|Bu5GNc`r-<53$%gJc zD|GA?6HYs*71BznkWaA<>e08^c3R`aX3UYbuDeM?Emoxax!FdAVm^x9VlO0Zb2e@z z29<{i*;A4?vMmUi0s?AiDvCNgtA@NA_4P9XtY8n?s@J!yvKablS1uAy=7FJ0!(WX< zCL(e5_DGjw7}@#|_A)eSHBaj8>5up*Qq#x}qJ zOZ&Oi`_uWb-dYn=902>p+{V`8pR+q+AoEM|cT-Pou%KTRG9|-}q6d^hi^oPe@Hdj$ zt}~$e-xp-r8s{&}_+LBk-B`wwAalLEnCA};Kf{|=bYsWsPiIB*L-VHAAq36l$M6O= zcncAPVS2&FYaNz*w%D{+bTK1`Ed2GEbb~Ai+SX~2QFTUL*#NY#QYOYPBm}s@z~3X4 zKVn|KjM;(?`|ue3Q;2?#RMELgG2#=qRKEz=H&dK|g3u9;;W9)h=jh!GM>@UlFd%7) z8v$wH{W?!G$~O-{w&}P zvKqm9Dt}&a8@}h831+j{5j+rk#He&#l8ZS{Gc*o&3^YZlsMt(9r5mbVo|YI`Skz&? zgB7V4rL{OPUf&60JMP$Y&`?fK00NQzThPh0x3^~$sEUdUpcMYZUK&31uuiIVE$l`a zQ`R55{9$q`?+>G)Zz{Xg_gbz*40eE@<@8J%qr9`eY-_wx5y{p}O)i5>@_?#zVU*mi z{jaq#M5M+&z^m`y27>Rj_l`1q;wr{@rNDi(Za`>vZ2#^WHvIagCQc{5?5JdW2v*vk zqisUH+MZXIxW2DkS~!ZIcsyVUT-xvzA`vEAE(IRY272{Tal|?kF-6 z_MMKYCJZ(R19BX~aTKcOE64CgHk)~Pd`HuNe|)ltb*6VGwzsj|&>?CGfr&SQ9g@`* z4=4$kkMoIzHCdP!t}P#0{Nt5Uf<>da~qg84jcF=*P)U4w6lD9fO5~P#kOQ7gTqZ8wCLrewxW0HN=-{Bz3dA@JzRmcdZQ%6x)*Z98c<}xutO?=5 z=qNgQd^DN=BMh-K%ZUP!iyMtWa2gE86Cq*g>bG;v*?KLWCqLDs7x~EJOBW(7E25t> z59i*jb_2`5&Z0okwBWHOdh33ml82puIs8U#E3Sj&LY&mYbN|%V)hS--KaB*FU|6BD z)k^U0``EX-J6zy>6%i^k+lq<^i2_}kxi!S!5fB@o%z#A=ugT^Xt(fv>c9twJ8u4-k z(!>gakB`57D_d3bumx&JEYG@S1WqA=HabinIG98v#x~H%Py64=MkHQ4s1h~d;ZI5P zvmRViX2su2OWCHd-cLig>^IB z_bQtkNt@Q9!96ZDiLbw3AU6T(7+KQ203y%jIFexqPQ0KRI`3!nsmIq===RhiC#5$Y zt8@RtjuO0>j~kjK<0iaNU%s7n4j6ZKAv8E=JQDT=xyOix%|F28x8=RkvPzlf{J|6+Zu?yeW z%Ar*{fYz1qOHt5fkgmHlj+yb6d}M924lHr4xP2=6gpDS%oi3cOsTS|Kt8VN#U^P0) z1p1T>Hqy$EBOm1PuSz{m5Yr$0Z0>z>PMYDK}%C1|wqjmPIcqybUXj_{62zxhf*zv0lYw{UFX4}nz~Zuff4 zaOmT9@U0m)4^&#U3_Rn1@O83ktVj6ayk;>5*Q53Oty{jWjVGYb09GNmbXFaj*N(f2 zuaZAGt)h=A=(nQ1HgpJkO?jaZ_cRzJ57!;%u;>`HdBilv@jerRvv#4kI_lOl^@&|D z(mc;y|1;zuwOS<^WCf=IE5nE7NIKp1YVMZ30?r%^dWz1%W+J1V2tFzm! zQoW`GG;|>TXVpf^vd0C2kJ$J(hs?L2S%iT@>J-|}A_zQl*$Sy-A}b10tsW>$9GYba z_rB}MtMcB>RFip3KPDj8MUmT zU0{$v=mc>5E(nq~^2V6n!+?f+`4g~1mR3nGn&b2)) z;a(19ow}=@F}7JirGmR$i{h`reDpcu9jspmWWI|2FGgkDyD1(<=t;&}*y6RlZ=k~w zGo*QiQVhq4l@V&_8ON32rHhdtb_8;OX;(-{m;6pD+FjN&&SVkqC@50H9$;>lC;j*r zqLtQ4!WlPZ2z@W&jYc}6%A#3!;k7Maq^aM+5JUU`Nd!?O$6+4060OwzzE{T)xMf2G z-4wF~45u+vC5*~xNE0vsI=k&*={jnAsV{cyuzXhUcb@bE47-6@6!xqsJ9lJtjEVR~ zNRcw*lLQiDz}1B?yPhwBmX7S{0ia>cmh_r>3NO zRxA-+b*K`_07W<|{Ls?4{mJ>j!JXAa70rQnKIF&*iJM?|?L7uk!??AIdeB|Q7;}Dm zN{D0I%q2FtdDGOX&K%>geco$@?r7W3_UI>dR6Bif?V zVKK-B)n3pE6-pdp6hrcBUDF0L%b2RRL&C8|B}pO>GMmkyrIsYn_sXs+OBjZ{|N4xH zX@%_@P0<;FsWmE@y`~*GjH0q&)KbfKFb*R4D8$PC)m_nva};ty(_+bhl8c(9iC;(j zU+_U{T77ZRakQ-5rDN7G1>_spg>2-A$FndKEHcAW8>3^umns66<1ItvrtzmtV9nTX zAn6ln>xk0eD(0;6&_L9>>0y7I)-X6ff6AxV&!;`K+QrUtuM+UG6OoXb|z!`ts0R+*v_ zz^O}UKX7t%(n&k$VlP6C!#f-=Q6uSLB%0U39Un

%+OHzp@JD#Nq7a0Lee+JO5841F30)q9fS~xd4Yer-vb>b8{FyWu7poYsTqoC@cZL}b163%tRet>dE z>vY@XWh_i%fz?O`xfq?zhc-$6qRb;~t_yjYML2)={>r(D^lha>@chn*k;_C81={T7 z5e$TtKIT8y3Br5$HVK6Edh@@6W_Ie zuO8941O`O{llX{4W>Y_cb(>Wv^ajoV_OdpjtN8gp7#E5R0IctZQVll2zNpXQE6tw@ zV)E@fDcOD$w`G@Va7O`NLQbCo3hwLZL8ioVKMH-Nkvu+^t-LaP^D7WFBqgbeHzOQ- zV2!)4Jd$ubnDDP;!tL|Xz^uWY?6ju`dm!00t^l?GM!#R zg^bG&JzK5zs3`Dg!6rmON;sz{HwL{9Sj0*;+@LSIwMtN<{F_`G*WEBrF)T(9zMAN7 z$ncOV_~MVhm^&XUiCb$6VcKhc(qq<*VJsPTLkGS_^+d`F#dDafft3%y958s-@;*Nx z{qB6enDMWl5tUIiqgDoFLe0(-(az(OjqP%2$r#4OQ$ZwBBBu=qUoVW1+kv+)@|^E4 zXbM#MGr@r4TFj88 z27j;p7GJ0HYIb-Su~`jEP;ms%WVKW3?Lqpo*PQ_;{P8!=@Fg!xd<`yuJ@9Zl=Sh9r zcsp=rT|Fj7h=N1(0+lR{xfgjmm#udf8g#ND!88dS&A60HHL`+)&On+x_)*xR_@ovf zIh4{>x=)v;5G;AbSlWojplsNlgt6f`-0eP_u5 zIrhS7st+%yb17B!r3$+dI`mk1k2{ZhW%4_?A`xl*$Cn+IHM+YAak}rmy^{AceQVI) zNud@)nyAOXgcMN}gTOGe7?V1Wov#;7Gckn=Hp#7>>sk2|hp9;1@5waC=K6#qYv6>Z z@6Z_l+kJbesZ(2qh?o!GJL--Ea_f9r3Fv%#B1gV|%KL)oW=NPmM=h!Jw)pP3Bi>RY zS~rnyC6U^Th+m&t22`2((+Q{0{C*JCk~-;d?kt;-roVIvfc#hhu>Cq|M`zc>X6Q~d zHO=_Gq;S%jldP4RJm{s|twe5>Yr5L`iR=e4WTKmHFJ->ekxFHoZC%zmXqsAgxd!_- zg{y6P+W!SWM8H1mnw-Ck>A;ggRhC8NMQae@rycpP15s?}eDHW{Ah z9vfsWx2U%+h5#@|Z6ZRw5x6Qt?m(|+S!3k#k4xK)*-PbpkI^AA~ z0Mr6!C;Ssq&qn0SBzVd}`>40er`0jP83ina6vD zo-F+Zyx8${fb39tkvLkAwXtC6NDg1L>+$PuqpVJk6@rl0d~(?r22o#SVP=m9)5U^S z9i9dfB7p&{=+1a@UwVXPk&dmfg=Z_C;Q6PLTPiP(rH!>_N6~?Mc51HmH;`*GkTRvb z^w0Rg#uM#Wkb~%L+_a+I2>jf`FE;d;#cxU9o)rfvct`r?t4|)E$YqZ_4ibxfWto5Q zW*<_60PWMNhNr{QR|cTCjW*yzlO*2m5*+J}`puv`?e&N-=|Gqk8Xewc=h4><*Zt(O z-__6%!Skll=Kd%avWVLu)`$9$7Na;87&^&vEJZ1$qMg<>_J_1kCVN+(kDmU^)jG}j zgQmGi%(H!ihmaxkkX96y1?54TsL&enI1G4fBmcxNPII*OMFjDz{-I+Tj^Z1~nj zKG2#UTQqc1g=T_ol*Qp$OS>U+y+749x;#+jV(ck*g<H z4)i@nQ28=`YFquU1=9C!fGKmeK8qq1MVl!-I&QlT@0+$#gd&%XBs{lVQYN^k=e7yc z%Vz-L{{B@}b+2FWOlvPEvqsEak{%G6Upjh0R7dA3maInTWwGQ9rY%x!jAW{3LjPUG zpb;k?dgrb^9R)l3y_nNRTY87hBE&kc)@yweGUQHhNQh01C5%TD!Ghu~0F)$e%8j-% z>Y_fa4fZ9tW?h{~tLrug@>oD^(bW~Qen)zEWFo+GcgK_sS%)HY!3X=1t<-Dq<8L6$=07Tgj z^YuUArq^W3m4GsoQ1Jkc1&tl^N5jyjR2C`SIzkYzHOr$lJ2ne?{MSXv6w`e%IK`0e z*N`D56!mSEU~Mp@2to)V=5_zqR{l-vvpV~3ZZL?VR9IgN0Yb?Wk5yeI20AD`K}k%C zP`WfQ5Y|h7s1E}GKXkSp8=_`6*FWj2HMNNV5EKziA@4Ds=rcX#FrK>5NQ0 zZ!ptO%d(76?T%CgvbtnCQz0mdeluZ~OZ#5ODoC9lz%TNfUfb>yPRl5% z<{tjl5J?ze;I*7Eoe?%6$1;%1lGkw>IeN0zcoESz1`rEmEj(|^Z5}`>0G=LPe+ztu zviKkMT!4~jpn1luTCF%aIZb|i3ohR^%A$uXvFn$i!lLXea%~v{BTe&brGxe zzOp@G45KQN9jeaB+?3Z+{yl)U9f(Q5Adie13!eai8nPrx%0(m)bNnxB_-4rnB=&`% zRC5>e?Dx=`W(;d_0dy9WM<#O1JcREGN@l8*EV($>c0PvN4!~v|iA>JrJ9L*1LV)K@ z-xyq)@XLIIf8b*jT91LY!982TlOTaCZ$?Tt1U-3P5yyj9ISI1~rf#AI5fe#WMk5(x zpHSh)90;UA+<}@s!8&*dP&CT;wQARLUVTTv)=`C(4V&*NDK)%r26q*}Am`{iLrBq8l#m}DM|p2S5yoEg zc76Zg0nxQbTKCq_B}5kAw&m(sm&HasJ{DndYe^l62{K}kRvhjOv0$h*YS!TMmS~VG z7Vr1gyT23HeT2UUf0V2D@(}|ZT^E0rHBn2JIdxpW-MD&Pj?&wIcaRj(G)<+m zQm*VL)@B)*(q@*F{e|?ydBpHcLgn-kUXP%!Q0! z`1Pk4j?ydV*ga@)weP+7-x@!Q>>iWpGX&U-$du_ouO$8?-$TV`-H9!Sn5zt%uv)5h z!zCO3nkG^M?VLK>iBMN)g4a2_!*oaEr*O&hnZXVk2A?newj$v7Cr;<8>vGx|`0Sn& z;F%Enzt1crrM~|(r+TK1T_IlL^oym5hHTw1b zI`iv@mDs3+oH=#f{}6bMY0^t7(K8e0jndTmo^jaf@eHYvjBhW%r5iGF8Z_^KYcs)x z&%p|liiBVPyc3e|?<=xy1p6mk%>aR@1NQeojNxNw9OZQi?b(^{LGiNE+gWJt_F?V1 zBl-#nK^{J0i8X7xT~OTsV}}Zsj{tg7OvWOc$;0E=s1|75`lgbeNnG@lbtYa#RM z(I8CN(+`o)Q{id72xc<3=RTfy{OkYM0z}_xlXe|P?X9i3YaH-qUoJqfFJ<7zny=aK zZ`9M^rhnnVFIY55z#4W8+uJ4Th-)FkQ>#7`LWc!1UpB*;g~774KFAQ2blrpgg6Y zr5!S#Ilvlxe-!GT$}+q-aa5RJgP0&8D!Svevg5L1ns^xE%jUARwt>)Bf8G6+9-7Jt zeQroN^l4h(W3ek#dw1+}X3KX()+PD4e}-3c(e~DUxs}t_ zf~|piVn@ZR{h`8?FoK&fmQ8RDnXfPa#@Q0K7d#s00h&{ za!Rz|GPahjDSxR`Vj1#rgd2>>1iN+zZ}V1L8uLtYAt1o_v~040k3H?%FHlZr&q31D zWV<>SLlkBWE3QQ#!gr|rNZ#m< zCZ@%SR-viUedW1j`^{paLqqMt`o~i}+JNtx!--pK52@Cy&vlFV;x=OTJAz zEhqX!{tVJI9}H-AOg7FHb)d1VsHq%+)PFm@_35o4?=LK$4{Y57nBm)f@cgsIu7eV~ ze1pcRfSDjt7cgXI;C5;Iw9{6)+sHYAjtI*ruZ9Igh6WE zQzsqlmBH$W&FcN;8@FTP%Z*Ww$kq_2^Bsu}199(MUCa947umihI1_Be6bT5z<==zD z4-7ZS^320qg|s)lN6XjamjgQ_J*W3A>F{$4D8vw|gZST4_Y1H1F>$lOE0 za}Z|g8AMFNQnk*H!zw)JJxtu3&^vAi5qa}Xi}*Q-8VePS_XXIv9!;FG%3XNf9D2|jl}QDwwm*bG zqaO)J2ZHH|k zt697)p_N!q)Rw|7Yxw;-szwERE*6@KJMNkYGWbK?$n=ridOQ4@x8t6{n@fndqhGi; zxBPIXc!$Z(`&s&M`#MdH__$f#h(bOe={&~^oMlLGrWweP#fen-@q;i7bgWQ*(CjLX z!pK(SVksxivs<(xg}wk_EqJgs&imFz%a=v;*-JRl#EYD1ZIB8mL>@gU=dEjQ=E+rLF zT2F;PNgj5|cmS$-@UT?S)CdK12MV)7x?11<(QuZLPl)bEi2CLL{zw6UPIajEi?~RY zzEkN#2vEeiv%!i!aw(7~6hwNcs&qsbjKHG~ix{xfabe~%li?C}$pO}SVkkLT^0iTX zw)NNn4CGQyc_zwtSovNNM%Al&GUv(Ij%ik2jV6JZ7`5o|c2W7rAraG~pUKf#i20Si0Xi zzr0&l?YLK>$U>eYN6CE=s@$#zA@qD66$S}+{UH3#p_lm=9a#oGGNp2HJ1%RNH%o3O zM1vnR<_`Zp6O4KV-7554-C&uUJzt|^M#a8#YorY23m_xoq{K3S)H5?q#enVe9K#vr zuIUOm*+bg;To@k?4{XW~gddA6_H9h%<=saY(GCuRhF_pi*@&xX~I!&8?4cE{c+Oa{VeF=B! ztR$6I{$6={I! zz6+dQt3}Lhy*BWB>ST9X3fJVVcN4M-W-X3yYEp$lua_VWak@1Ew$WOfP7*4?>A(GI zlS?Km=Yprbg8MTp*yBmn2nkW%x1@&+A1cxo%Fis)|6|0`~F{gRql$Hbah zA$Ay2-|e?QA}#}(II-TK^bbi@CudUc_n_FO%I`5`>o@8r!`ACHm}&CE#um6XI{8Qg z^w=2MjTYTlr|TxFJh0YSZ zBnVp!lIz}Kq*L1d#sn>Z>ra>Fg8diNiC3by5M-v{;ZlQIbtF{!$$^(%Tn0{{)m(-8 z*qkjweeRqOxPN=l(D32ag3@uqqht3NWQC?@1xi-*NSKlo7BT3yoZ6>VZ|@UhLv+U~ z8dEM4eBZaK5EOyX3)0YjM*~;cZX*OGQTcWBi@;%>#q~X~!Tayl4z(e^PlHA!%JEIS zm6%TS=R1vGep$YefpSKo+rQ|}`}XQFrHk_gph2M%Kss{>QG|#z zOVhQ7lMscC_V?8(mSODTfj?WCWH#mgUO!JAbh&3$1O)1L{zlJ4pAEC}aCEtRm1D@D zt<%nOjS1ouj9alD#N=!XJatw3j!6T9`JYd=1^SRic08*@&94@pTq@`AdtL)^tJ()Y{ZEQrXxG7ZqxU4x{$3Q_+Q(H_8F1vhBE970!YxubLEdmLNa4n|L12>nqV0LtCdYI=!< zFl`DVgTL*~%H&Au1wPINZd@JHfp33zrQwDxpV^F};b{pJ6RH4YGu4w|Bu==@BJHfW z3htntY?I_*Dq&&EkYWgW9D_sAN>g_wWm0N)jd+wz6B zo3=EDPwz{aOy&+kg{K+RBV~PspvNAp9@=PrA^ZLBx0?rLz_ic2Wdo>)|c+MF|V9V zFFBds2sG=0vt+5!xswjyn!{-87vdl5i-C}l4^5j+8_>jl2xcQpWT!%o$An5iB7IQ% z)?!}C!J)i3S$N?KmIXN`4dCslj@F~p{ay1CBo8TiwV6?pt}iwDQ(tR0Y`abBA1g{| zA8V(fVToq--n&!-fXzkcSA&or0DxPGM?T>OzZoaO^Q;eK`g@+Rgcih|t-r2S%!OKa zAqD@Q38DV*Z!0{qy?YTpjuFC?qQ;oAuzaHh^TGh$wN_Q;szHRC_DdQq6f+O;Lc%XtHj4C%_cLL~UVn1QHIt zN>G6x>CeLlHQcWbGLl#7lasSp%N;K#w#nqwJS)Sxtl-!#sGAe8TgSZKfMJlHb#f6b z(lES)(~qA+B=&em0Z}cc(CuQDgb{KJwo!jii)gK8Q>ywxX$1FaBged|0F8&u=c2&l zfKbQZM1{Zhsv1X^NS)Pju56!ZZ(DBM>A;_l zVs)fMsyI;r4-}j8AbBrhqezlIcQ&h)UjCuG0*A~J&au!5*N~4LG{(!Cqu>dj z_3(i5(@+wjeEi6SBAHnpD>$iaO^q4hHBFcmibP`cD{z6Hm?lX~% zUrl(itz;5#v!#;PGNL?cI7v3!ksviPR$}2bxFG9ouMUO`Il-e*t8}`zbL_NqhHIrA z#vuvUBm%TiJrm)clrri4zS7vBDX{j6GRRG)$pg(0Sbs{#aG zbU}cgK{^=x7!XA?@E6MP6Crkz10_E9agi?j+>X?pVhPk3KdM|xTx z5y1U2_lROLnpFzAs)olZ;UPoV$r@9h6U-bc1%;w3aj-tnOi|T3yibH2G@d~&i%b1f zr$*ovgCX{Z+QE*tV{F6g{AgTt1eS=M1mKAs3&sv%8#J}xh!`&GK^HPzGC9YNYfhA) z+hiA!8!+O!u1#kur|GsH?T#dE{rQurNXsno*Eu@MR!7>ydQI}+>w)z6Ee2HeI1bG* z5rXCwzgy!s##g4E+kvx|QQJdFBWh1;0rCz+Kr|>sahXbE>|sn-D?}%L{y`(jTWO>heTjTsx+=laMG7 zdQZ{jL=R21x>sCUK0WSoOarLE5spcw``wsPV2F0ow)OS&xMi%pdp$iF|Hg?`QT-jF z?w=e?roZ&aIwDb?T5=B;q@2w0zP`sHwDOP{n@3sUt8~&_g-&|7EybxAL?kfeMP?Um z$pSfp^sT|9w=K%zYxwjBRXZ$3sT$7>vC~e$wQ{5n;^(%VvnEtuB#Ep}Y+|NpCm~x8$4W`$39XKQ=%tIXJq!D9rbl^{?5uop(Q7^0YtHJSj=L+Lq_BeFPnsGvH(+o{LL#2KSObQsDTzrC5ZZuHp|3vK9aJSC6^Uxr{a}+2(IAI84-#Jy^2-! zB;?>Agn}m=qS$G@@k?Vb>2!1=5q4#}WIwODdx2M38uqhi>gFuI;;6Q2{C^u_45&OF zJ5!oe0OrtkJITmmHS`{YL17|kJ_U5DMVe5CP_l0K!|2MkIVqJB#16;;^=q$!0|}(^ zko{x6WLcfKgYkkrg8LN1^QEFhMhN`^Ry=@_y5`5W@01b>1;gv2K+w@fT^L z*y4u3f`A;H3;D%$BnebX9zUzf0)9@y0K}D7atcqMB}W9U6s~9GCKYF-`9a?kPp;@eOtz5VMZJudzm0SV#hrQ3~MMBIE$B+A?y5K)2%7D>DpExfy z55w)Rc=5Gm4Q# zE0hFr^)Q;KnsMyzefq4f*Idr1`T;ribYjwhi)FDCA_N5ljAA~BrQ3)ZHS5G;#MkFa zL%|g+Y61W}sEm@a=y8RrY1w=1pdAlsS7>6H90OV%{&hCDOmR7%{Zq{3o``4=`2w-J4(cnc0KSMObPvLRbfa#0A++_jrBT_>>@ zpd|Badh|t{&K|w=ELd$vCHc*WrTDFor;#;EMX}#PJZhmXR9bm0=M|h$vo?2m@2H8f zYE^g7qd?tgw1?os<}Lh==gsX)gPm`Dq>xeL9D#rkldquFAHzQxMU5N@M4|B1JVejX zjT3zqlp(D4zQftQ%q%4PbwpHaY`_z1-gqgEHxw=jWime=r6{~fJBi`-I?7fUXn(Jj z-SDfwD}FO!zG_kqQpueu_eoB-j-bBZUJl*r;obs4L~%N<-*j!XczJ7)lLzA+g1pF% zFw9mm>>TduiB2jl9Qm?$?F&uu$)Z|fgmyl`s+L5Yn1FLfGRyeFmrht{L_{JxS3?KRR&N7Mqu?4Y$YuvTI|nFDT9 zvR@4sKb~)x(8m15%~K)q%Gdk`c?+Vj6z1c+9@xH5+Wi~*3rP*EIL|oFw47@v-D{TUplLY%Y-j|fLQ|d_Uh=c zEtr!4ZpIH6#P~{w#e{@~`auqu8>N^`S7ss)x_w&Otcf{%e=31{j2%f34#l)AcBwWV z1}akZ`Tx`*T?Lho*w56B_i5fx+W-Vq!r{GxS>lU)zlvS+S7NL{0jU}_@njuAeMBcV z{O?;?mz*J98QBT0$^g;6-u9)wjnxL$mKVA(V&BI)!&fw;KIlH7K4oARx}`NTE24lB zB9@Y=?A@eYdMb_y?jQx>=^-hRNp!`dV9R&Ujf8E_vL-=@{A9P3aU&vohIhO zs3heKAsS&=@fJ@4S;%Uu^DnIn8s5AtC84O@&^ITXWaBEDTMGxG$fevACDqJ-Lzo;a zeOi{``_zXgQIcSs{?;dI-GouZ-5|`9e_YRzc4HYW zN;JaC;qa6zzaJWX-ZMCk!Nul2;T-#wW%!rb@nIxOOuwXYn0)nrppcWEo)!pUIH}$=Jav~rob(0^zdIKm=e@1?*G-xxqJEBr<`>DgMyDVi%-xsp+S%pTY zv(C2zw&JPp;*svc-(Q>m3o9|a1%)2Neao@N$LQbdQ%yB^K)QA7uoTIRdG|p`Z*!M_ zS>fExeeWHAqdBc_&jcR7#zprJT1&bLLfq8>@Pm%8dk|vldos13`z%eUBBq<{-25{ex)jig7TuWUJ?FI~3&6#vtD#ic&Lh*cIgGnR`r864r(u>)i&w_{vrCJg zXp37j2LLl!{E8#o7$YY?1W54)fD5rq`56CDNjpqoTJW7$*Wo~Abud&cw5RA!~ZnM%+{ECCKzEQ9|tMIxHDs-e@S`|)IR zgF(%6{I6{V!wmgiA(?j*{NHWgc~UrIac>ZwoPKuXcv)3eo$(V(PipZ<X} z6+-nN*e>oZ1T7S%dCltATFzuTtfP#}HKI4~XOGtRWS>zryoD28V|4^zHnpMjz-$*x z!>{Q5GLK%gpk9ig6!?-|WH&GV!Dd2HHCk0BXOC4K5I7uQcbLTJr5VxhJ6p`jeaTh< zOP-Z_<0xcx6%5cS{Jy?}4azJ=nAaD^ zOmuIUKjR8G86sYr=l2NI=l+r1IbJlzGvXzHu*v$~*99>7OYg)l|8qtHbY8zl+WjlY zY0m?`OBu4npqM)^vf_-bBnx)9OPRaS+c(W}I&k$`0+IhLzo=J;rqpXY!<>xOzyBUF z_j#JT7SKXngaqJPrkwZv3Bjf4Gfx;R@Iwh82-U4pQaD1EgT@X(I(!9a{4lCj zR9a^d49jODsV}SAFQgnUG-QdhDM$3Y8w$J|u)cK=iyNXoVS0sl9IWkR*X4`~hHZ~X z!Hhaj1-+^kamx~7iLy_er*MGT5T=&`?3BP%wDxMX^LMYlv$JPlzd*xdg zg2&ZQicE!+GF-UsNS{$0;Pc_HVU;pr`cLqnI{{$dj?LM{KvnfA%cD{lGhMurJt-6wU0B8`9S~7%5 zKvEqL+iwIN*;%!~9u5KH>UxZ;8$5}EwdW!}&5EnU49vJrX_-V@^40~eV4a$Ir$BU;zM&=uBRrj4IIP>z+E-GSU9&0OUlokcJtpM{jZ6u`_BMi*EX8D$rLuEaR3IOu2k?8S>-xvX&v8y5HHC;|C| zSt0I!;ia8%RePq`{&o&gNWol(|0J3iD4)V+*GfktZK0JUb2j=W= zJ8AsGPj0-Udtl^yq{`_gnVA*QL<%Xt0QI~AV+xq5*%_gbM4`IFE3g->|$jIumW(JvhRi z-?8hOcq)A*W`Z;UBvLYxvM<;^Utk(CxJ~IROBbZNRv6L7AsoL3B-K&9#Q_&FrksLt zbwl~`cI7Sz00?E}VUpscN;5~!-%**>N{c_2fZ#nVJJ1|X=AZ7Pd|ZC(J#WR*ihU)M zO7}8ZiD+5Ca?28GS(vtZvR)Wr9I|eVy|u4>#zIT4z3*w`K-Kd|DUf}7=FrsXP&LXq+ z4jdC{B?a8BWPu3#_0 z&`YO{1jCjks%piTR$jSe34uh(*slF2W;}WEo0s3L>^a==y?9c-k`OW@&sQ}aqp<`` zllcRFPJ+WU>?34Fac)kFj0+f5PDfN-KO<4FcAQnzC0nW>eM!Rf#O}>KsLj8FU~TI# z&REvv6Q-AV=kQVX{3|;zHz~DGpb7@c*O=uT&`KC|f?$amq)HT2A>MsV0^@zh`@3f) zob;PNz1jHBYk&KLq0#7N#7PAiFDz=q#HcTDFgNLv8!&YT5wdfTFg3FtL-Ko&HdYx7rj9bor8x9!TI@%W_xk~8s4#u&!qNx!D%T(iJT4JNbi zvufAC^p=+h68Z`ZD`&#s!J2t5f}$B4_rz57W1?NIdz1w8YA|Zu^ z0m>pwC)PwcglTWFhy=LgJv)8E^cuf>a8t*4Ds>09^T!in)yph*{AgRfFb!@q>YxEd_TgcS(tfqM=>HLE(o(Y!8tDV<$?jvUeVy=&mzYtHQug44p1DPhnSS;c1Yt}Mh>T%m~U(4=TlLaxVoQ}A*8Z#wtS1trw z>9aDpPVyi%W%`X>CX4!nStY!>d(RyTV{Nu4PA>xOW~Ef9f=Tumm6gK#m>yLuQA|@l z**mJ#V*7vV$~&Szzhl#PhsR=n$2jks35V&#zGmDPIjB9$jGHhF`KhrkmO050jMO>xRpg$cYgT20 zV*Rb@g#`?VHx)}v4!P}Qzf!Ax@bt@XX`lSt@87%UaQkO<-FTJEkgH8rRE))vFihV? zTQh{obTHF?sMZ=`auCF|)fiPyuW1)-zJ=+uQi($%C9qEcahuy&(8p>MwBdhB)x*#3 zyzj20t{us@Hl}riAOV4p`;`}C#VeQq0OLR*@o+*b7BApdRU-MwiC(4F`{Dom@VWyp zzrFu+qtV2V0L+N)t!@|?jV6%xE1uK@Ow)meEUB%O5|alpl0Fl0ZPkox!Bz?}yLhzA z8WROCqQqsT5<6>@lqH1V6J`~0$8#^pJ^e$MaX~O_M@YD?Jhy^f@J}jTcrem3gN-IO zz%7vs`K|pOHBXp~F?{D2cO*alweS7+q4w_2Wded`q)b>WkwQEr`%$#B3`0-YrvJ=@ zhOAShjTQ{b=Rh?Z=VW^e%=MIFU#Y}Pw#t*mbH?aCVOAN>yt?z5sI2U?oh}8z(wTK_ z%IMQ_GN+-KfB}_IUM|Vhh@&9Mu~=*_nNaM{zI){xH$AlZ^P|zkrHt{OnRuw2Rxut+ zKsS7KpxFU|p+#*Mqyi{>|0J;A|k6&iB~V_^!0p~ z?2O^kn{HS7hes|qomAEch28Hha-PY_ECRKN5WC>Peu&AUM^ALkITpC(u@{p6^7C7+ zIn>_uiC9v;2{WJ&q#Gv2Vo9XZivLl}G+hz`U5nYCCy8`cV^0kh!btiIB(#;N^(ffN zEX*>9G)H*d10n{dYHPZ%cm@A+sy-IiH}t;$>@&{~iQ>kR)oCcT2+(j@OqO%2v{#|t z=NxFL0|L`ltEL91Ywp^^wr(a4>Kx zW4x-dL7Hwr(@g{dVom4!%{L@s2W%$@>X?CW>w9$%D8VwrBT=v*H|cRcYs<1hc?>UaL`vKubhckINcG+loYKvl(YHC@NZc-#*N znyCq#X|@rvoCA_L^JK}nfT+4IY}nm3rajlbblY8FlPvV zb=l9~ipuiCoY;sN5IQBy?#A<=mY5La0)ao3M#&O_v4k9*Fa5LsSSS1QfB(g{?_c}d zOFDW6KA%>!2N~yM)iO6H0)nE66inuq3#%p!BMHuJKD$}akkwfP!^)XR>dWUKt8`$*_T*3qaJ$;o)Z$|6iUv%t;Yg*5 zb1?%!DKX#rY4huQv@iVg<=g(|N7sJ&$cf%hjl~kb&<(SLQd*TjS4Gt@7EM6$tx=3GUy|C(IedXTNo6 z$51qOi~YPy+)L(hZV4F_T*?}mg3{TK5VFdAmE-8(RM(6oYCw3sDi-JQF5}O>bH(0& zx$?G4cO7i|aC>+Emt;kKh5#}p1l-PKaRHMtL^IYV^Q}#9K?rm$YHQU=GZ9d@pr@;I0q7_uMaw zls1;^WJ8|Odc#Zyy40U#2}nMk0F157V-A_8J*b<+)ZKf8B6ci6!2IDh(; zw^9#0zy0u7EdKCtG;v3BL)|ff(oiTME#lVNm&1dwM#D6bRy0t7KoUj&Yw?CLk%}LK zX_nrWj)X)61J#`lbr!)$`b;QhGv;~}Y@UTq7}mA4BPeQsDFEY30G`pTE^FU%+O)TX zmUhdQDm-2Ag#omnM8%ZCFX)Hq%`n1&0QTN@``@3oeA$hZb86#D0unLj^%e;M8k;S$ zo!+&L5n$blX^htfDCKQKGJtgrjsMw(i@&~Uq4wpszw(9EpZn;ApRSLDE(r&N7g0)< zW17fGxd;X%G}MJ53jUh5vL!0VaQ|kQhFrqx0~R#~5eZdmkwTEtmmsRuUfoKsu&U`K zTEdw+3~CVQJOki%Ux9;(jc3U1OlmDny@JSr_1twWTmNgEVHl=~kDYh!@wF>gd@>*i zt4j_kDp;ZfZZt^=EiC44GGI|-){2V&ddfP=AxsW4m6Y%P)m_iFE!4hz{oSMSd!BxI z?{ho$ZijSOQ+{ov#{XKD~6w#d;!!q()R5G`0ryp6aC5TFro z>o@kl!db$h2k-i$(^sx|NCZMQGba#_77ysjTLK9{V@u(W^R(4KI5_p+=@B4)vaDgi z03{kveRk1BU)}Ea<`m99dn5hI|M=MQ)yo%OxMFeZ7eYblGvQERrD3qL(=H`ZKx175 zlH|K--9l4GFgCcoq%}hbuwqff^PnF!u>vDUKMyUv2;#Y~gGlqQ^jjp5#M+h)h{Vh+ zq&d{lMubN;c=wPXfQ_`sG*xCKUOj;2zJ)nw5E8_b7oB&``$D341}PcGJRxS_P*8_+ zKokK%%pX|6Y5SPm1eEg1S*na_`wpMD`;JFn?)H0g3IoHVeDiC&6A!=e>d_-7dY)-* zZn$GSmUy*397Yt0qXQ5t7#Aokbl2u!y*{Qf*KN zpbU)&f5|#axcZ?@%K!fVe*Y)upK092<8v0xC|_5nX*=e zVEI3Q5JOdTU+1j^cJ4jQcJ4hK1+W>wb053l?9ey<*XJ%;yJE?o)Q3Z#5k+BbW;$@> zY?9L|6jeuKT^ON2!1oW?U{8~dQ9gomZ7q238q(Aw7(Mm}NR6DC`wzzaiio9zVO7&f z1cWK8Su;%N21A$ya?N)qi~N!uR8Id88>0dah?V<1stx|@%VBX zpYOBZqxY%?rV?9&k)xl7o^H*vIOiK-E^FvReIPl_3u4V9#B>>*Q;bw6h;*V(glBos zBomtFo^<`MZFa%mcglu+8#k=~E0K`;k}d^7oGKXYXbDIGNy@z?<3K|MnAi&=6i`Mi z*R0FXZ=++*7;nfp&KC$J6#=5$P7B@Hk4&X6DNRuRq zt(=z*F*KPK6vPKw^eUfXxu z_ID1A`Mp>fUfX*(eebi|PV9X5@QbULF1mL(7JsoW6jBHwD+2+sj#-NE1;>VNm`JM{ z2=Q|_0iZWz;_fvmC;~@B({Mp&7epH|h=vLxWSJhu@Zm2a-uHf>gcdAq7ze43&-wO^ zNGYstJ_$;uEHqU!p&6Mr<`lu?a!}^sSX@kiphp!-CeTW<%7r;k5cR*X*#~?3;Njbr zG`D=YAt1fKL!DtP5n3F0tgpN?_Ijpm<*IMCCJoVmiv&>W};(<0`Up6*6^htU7p;3|D8WLbIqzp zMQ)R35{UqDEq~Az8lZ}jPnZ++F~!UWEQHE>XF|XTh)poE};F*F^S>6)hQ&h_NJQU zG$`jKx4x{R(e6l$GYPTo4`RIQ_cBE2;2J)+RY(P5W`caCyitsEq?OzS31uRPoj8LV zG9?aKs!-j;f*sGZMAselT<-7l=cd}g(_3HJI-W{D#q9=#C<4K-Gx?`HX+2m12H8c7 z#gO|IU*>y>CQ?3O&Jb?d^upLJ58r=}9N)7U%3BQTLBJdaxSsd%E1HJUSOW2+ydWx} zqy&!pR;Mr=$o;LYN&A2wQJ}7}9}J}#g9rZ@==+ct%ZsHSWjo?3TyGv>7>G_$?`AE_J%C<6{R2t#D zaM`b9R=F=4$lQy#J4}xKM^E~MIfHn3OQ+H|lD>{JO@=uLsQUrsEkHX0u-LS&=a3Z@ zqtQ50X$8C*rB-SHCIRkSokDLY*U}*zXicST11p^d`w+r$D0Lp*JoF8u$4)JSbI6?a z#xAZKLUVX*nxo2uZssq>C<}ONhlwb%*H{50lzk7MFlz{Z`NPZijU*DcF#=X{To7WB zrV|t@`z0$=e=D=h7a?F^)Gw_u!?^ms{X0{Nv2AK1Rso|IP<8>zn=q6UIl8HgaU@b{ zj6~;O!D>o4URsqvMj4pr0VenSwB@X9gJCb{4=8Ps*u*(?yOqS2+Nz+r6}ZtD6sY#IFmOdfz( zNmaKwX5>et6jn8Lfo8q9$v9-SxMN8$gARCY`gT$Y(sQk?;vnMHwNM2C2f-Nk3A5(# zpSRvQ*3m!kBTk6@m+7=-raCREmNCo9oETt2z;F0Dgn#|j8?UC)#ioV%rex&iV-S^ zMVMX+7EILEbZPw(03)3GgjtKYWz&cS#K!HWK5rV2UPgOR~EG1#{q@#s+)dJ?LxV?35bG@gWRm~-m) zhguT|FO7l#h!mMkTVxr;X5W@lfgG-avm#41EOL%nKiJfW1*iwiSC?RO9 zo9;E>F!Uti(PJ3w+m7LZok*p6kXBWU#S(}nk}%EMC(b~FjJlPhlS96kg}FFk|LI5~ z&70CkwI#T*>)UvF>~k=AzUQTEmn=0gH==$xRyTJdBISDg)2ac(WHwwxL6~G`K00p) zf~)`?k4RW3;}*n<*&5(JVb#l3l@=5=9iSn(?wd(aS!Pb14LC7%*__qYaC7aX>YgT|vMvft=VohOelsmqLj z41AYt4P*C_c6O+}<5y|Zv@g&c3g-*0PX}Z9!9Nq}B|>1{7PpH{_lX9CU*Xz4B_Mt34U_BzJLj$vqY2(e@eMhy|C5Y$n>b_68LtHA*Ti@0RdfdF=# zaT@OZ$OrM}sT&{%0|f~a02CI%6N6vEJ-z=w6joo{NCb!A#=^{=bA{U9FJ4?Xh}Otx z?mAmDq3ZVIVAnAjcRwFTND$n&O+l{9>@^DI7?ve&ER~bqL!g2n0iQ5y8lV2B@AUMI zj$LH}_The!diw#Sq;vnA$hcjo2>8b0oWoD=c~==4SFQt4u*_OOqKJgVqC-X!DMCSE zGE&sg<47eAK^@+O$iN_!!EwYBvrn8jyxxT2s@Dr;lW# ztxv^e_x53NU0so!?lQSfns#|bSt^;6rSje_$|+PoO1Ad#+b5pAKdxyz3n!jub-a|( znJqP<3?sJ?bz02?15rS5pIYMYV9q|C-r2oP(acwi{d;3X%9VbbAj*K4w}&S}#0I_| z?={cD3YlW2gh~% z@a{fDQzq86G?r^l7DmwFHEwP#mD70yqntw5m`|9sjvxQ_e)+(WW8Y$epyYS(G}P7Q zx>gJIy_#iZG7h8^YgITIDeKU$PbuB7X1PCpW*Ijz3KM-esE~-P@gV7 zr-FmJn1(tkK4}w13cLG_mItI$8)X7Sx%J>S5}i)o4Kz6LB*Pu_FO@AgF#m8 z2|kuG@q@ej&@-%ob6~@wCd)!CQ+6)z2)ez-!D(d_qvinmAfkKoA)hek0xtf?f7?3{ zjs1qhCN`Z4R!Of?U%svZ%$yoj@nlA`G33fcK`5nbRxI|%PYvL|ZhB{nqM5H23lIwj zMTCPQ0us%!HaQSaE9U*DX=itw!q+1RsRUVYw8$D(^^W_cx$yu1AOJ~3K~$mPcpv!S zIGCze)yoiG8bzq3bhN8ffWVv>9EL!^2`zYHvAI^9urS>Q{SXGw+Osevs$*?SJ49lF zalqspx@nQ6UB4QsRM=K}7C@h6XgC0O&47*@!Xo4sZ4rF8IiI+Y6JT_#T=HKx?fyzSgYn=ZTn* z6tGV`&rP?pqFwW@ESg7&{2WZD^S5Av)L@h>H9IgkGK$W=1Uh=-=;(?l5^nN z$A|Fxq10r%1q1;r8tN;v{-&QJdG$*(4{$8xp8H}ND2~3WZQi~8PH?!1IPR-JnH4H#eGlc1UMaMa(%w&F~P>tZnckbJgOzUq<-|EiJpQD68 z)y+3f4kZ8AGdsKg>}&tMWBaaS!^X+cv4<7Y9B}Q&%gPDqU!RQe%MH4_P0M@liEXeLyR!7#b) z^m5xJVI3}!cweO?;HJ~2o^`Tg9KCybtl#fXHFF2wzW!$UXy?fv z=$KXltPsL=rK^yr3MS)RlQKYrOnQmKam2Y83I~0{tRZv{r?#b4b30&FDM_UbaL#*1 zqU!e^+Ir&rKmXyjyMB1`4s`QWLh7IrL=2a-8=YufBe1QU3v54N8+Wf{qN_t z?oJuT8}9AGX&Zee0g?a(LxjfAEcT&67=}a?luAS*qKSreLl8qc+^Dcn5ZCpEtt+|f zIX%S9T;X*m3rhl!nv9U;d4xH!&~gitbDX}U)rz{ebG16*(0l zq4D&89qx>M>iS0xef#^j?(TAO-J^RBYD0<`#63-45f0q&L_+{ivPanUgO>N_RBQR`fN`Qmk?)H70dcGOh99$1BG&zcVbdbNBo|c zUwHZ8(K{KXTJEF-_j^!rhcjlH=Q)AhfM*EM^`y)*3qw-c4$3|z_b}a}Mpb?$vRHF1 zOzzI>On~K$^^gLRb3(Is8MyR)79-QFKe-e^&>3+5L;E34D=_X8<{ZY?{_oG*2F7Do znRZjoWNv1m8HZbWnIJ$?wJMi5@^BE!1fkyVh53csUVEo)Jgsc!wi0JHtMr(|st_gs znO9_C3MeOTk`%2OTr813P$&=6NqV8E)@Emu!i4E2m6mg0eQTo)zqusR{N&p5t<_1H zJ?A5X19<(d9&~h$=e31Tm~$9CLqqJP*WbJ&p=qz$j`2Xi%Fiq`hP8~9nM?!JailCw z>xNI5^9(!MI$8Hv>`n**bDeCSeJI4a<(LA>_u-YcFpIu9FTST(kVs(>ru!;W1gKTQ zgplV^a;rPRILC%1EoBl(5h4wETxyV`z&(qPZN`BIA30F4Equb9sqiH3`D#evenC>mib&FfPeXpR0Vg(Z&E)vJ%|KPC^?Ap^` zbR77Y` z1W6P`!dU`qaw{c?8H^Fs4WeHncY8 zHejXd1tB+$?BpdgIgHQ!un&0M{Nt2+s$Pu0((}<{Jm_iWnq_W{_7O@3%8kiv;I*a z973^5C8gd@s6`#wtm&T!1+7M>s0#+Lq`odUqom+?C`P6Q+C1p4{~ZYy5NG%5?oVLb z_Rf-?1|RbP*FN%C@Wcd%ZbGmV3Mr@~tD&|_t&4eN$y_kz(uN4?!+|n8 zp#YHw#1_vGgIP%5<n%moKrK_C(L<_YaV=5 zJ9PZ`Ptu0bR(b#hi&rL5WFYO#B};+U)ve9`7@CKWb)6*=smBdKE^Q^)D3+&6shZQN z|6hl-uSi@T8G&rqHYh7n6s*Y42*b3}+1(nyl2Y3S=5+A_0x;%m4a_;mDN9>HsfXTx zAjzwQQoQdS60w7*TT7_mI0gnw7cBQDyLpCB{nK}QdPhcnWM-UPMXk(0k&OaP1$1J$ zW^D#Pm88Zs>sR<{Kl2oqJ+oz>&e$z;}?f~2|@@?U(#Z4yp`yQypzIk-Y-r_R3LyrZJ%p!j{6>X7lJ^1 z!dz(h!F4x37FCodO4c_FhKj5Ds9GVrB5&ztFdjK;!^)7~;`0-a?>(Rlr{pJH7jw*> zz*J(9p`E-QCxB6oW{+iI7B?@7kfN|SgM~-3VE{>Hv8NcFmKR~`Ce4BYK%=GIxD%vl zlwo0lfWe)@kM&*>>?&tuzg`_TiqHKevMFj-_B0PcNYZ^pIk6Xt@%7ykYGojt=N|HVoL08NUr7huCQ2Mk_vAtzB% z|DpGu;S=UO#`m9iVP8_!j&OjL9f%kHmvaO*IJgXWlVp_f=P_a8ZSUMM&gJ93Q{djl(fTMI8 zpD^b!Uf;X-o@iQrk=t6Cg_d0z(k!)j6KMT8XRP%F*yk}$jz?Ka*Pj5H?!ULmt;{~s z#QuDmDL(Dey5yP463(26S%)5QRi-h_O!vkwH9-WuwmY~0VVVU5*ck`zesL6g+NSnu z)-7&^DAJ-;T3iPJg-~G66DXUIt(tPBtxL}Fz$5!$7^OXGlmO?S7V!ylKI1Dtxl-%s z>AO_pe5mM2p-}Mwm?%AnL`p+(RcrNIdVb@r_LEO@K`=@djxL2XawA|%1^&2H7vca| zj>3;a7=e5XvxsZe@)Wuc`XPc2P_xE+H$NqWv-}mv>j#r~=#}xDzn!sckqdJh_5na) zH#I{Y5V1fql6b|B;~nF8{f*K!)|aXZ_@}k_+y|N<2*fAM`HtO3+t?#7ZMh|; zs;}m#wqzq5DjX)rIG_~IJ>!HhK_JWFyY}ZbuG#XcY?$WO($-&z36aAh&75-zxMj;o zD={;qS$Ybc_CErU0v2X5NMMjSb58=20+1Rf%tDZC#|m!Chk_J8`tl0=$Dgmjk|r_dHGRx;eCN8GlLwEt{fka8 zR`{C{i(8p7Rzd;g|F!q6(UDwN)%)J6eyT^(Xx`(oY{zySo3Tk8n}h^{SL{GOuaDP) zA3z{1Rv-jO$TH>?Oag>JNPu8F!TG+Bharib*v5_>XN>W4NIag**z?wmMx)V4BdPUj zNiC_L^|*&0Roz|PUDaLHYR^dSyJyu}cB{Io`qr(p>zsSeK7_3syLUjU{k*Pm@Z1sppwSRM&Qbz-& zjwJ-(%TLYW$k|-oUEQ3BW5N}%DmRZd!f@?i;j(|6jNq5N9%?Y{Uq~#5 zsRbQplLZ_f$>PB29RA_k)0kd#FNrZo;JRJgYWje+u$JlEr5y=BPV$U+Q=6s>Jn*d} zP#g(CzkXXEKJp7&5e`XdJc&|VjR+sV=l>s?Us?IItDu1zvbNd@pYswiUKyKI=N)V=g)bCV(utzR)Ei z;mz@`s1z^g0NnTdOG5^+iRL!2ftTq_P4zku^IwNqbTNvJO)mpX1u*?JU1R{dgi(Ls zX5ZsF7}wXueN{NehOTH?KcW#6G6wW@#jw?x@U!X*@aloN3KETS*JBh7!h;VT0TDsr zz;FKaX1xDBn|!x!lZ4rUc>gE=Vfonb*^jvj8mJ*ab?I;CA!4AYYItHcy;IJm*FV0r z_vPhuKK}|ah`=E@29GAuHP+atQ)2O|d88xemp9KltGz6RG)sbPdhAIgB3Kvc!O%L~NHF(T;%7O!I}nZbexl&%^t4%HstL z%NAR3a+n_W7D=eNECs?M%%E5oHJFv#)18Qwmn5ly7=a+d?n}0L2o^NBx9v*!@k63v z#dejePo|rMhyU{^blt@5Kh}faxqVCErr?q=I}~|9-2b1C-@8&Q{-Evw36<6|9WcpS z%dDNMLh!5mxA#NVVs-@fo)|n}aF%l=#Aexxn$y0ytXsAa-pddJcWC;7)v zQ6Vf@yrB6kYJOea*PgCQBg)2v3H->V+x<7q^ddDUk+!>iLzLGz$yNc;>ERUi?H|M2 zuI<7dzqAd!1@@DK*}?eK*B{W1oF4jJow52hU~U<+%fj^uip67B%F*l$eE#_t26e+s zwp3iMqd_xiR@14%pYZxh6>HVCiLMgJD{sXZyfS2KKZ+0`)Tnv1SGYKwTUYnBCsBFc z8xdwSq~O}En^rF>P-Y+oMBA9~LjYpjmFOS%_F-JQMa9S8w*!$-Yv+)J+2Q!zPk(M` zJeB$@v-195@iJ@cGV=n^YaS*d6iK{6&ZW-4tLLV~T)wcMnrVo-d736FA{cI|sS0aM zs4j*yLoDDbCcp|^V2t_dYZ)N}Dx-i)wgjv*53@Vbd<~NU*xs`Ny@@!O-+rjgpuk$g z^qV;5htWdS^_N7z#PkYYIXHs5er*SOx|G1LiQPRHr7F>&DNiTjs}#XWV8 zNhDTZ8j!2gRS|JD^ajX~Y^OkwrtgKK_-`WZw8I9xJC^veW7Xfyq6J}@e3$Ptbdlj( ztfs1@WL?x?ItVi!vq%u|>kg5l%N($L%0s6XzS{x zCgKtBas~{!hGhj2uHCgQaH32@A`M!Q){I0WO5F`lXNoZ9#_^uFb_Y6@ZV03n3wYtk zGVc1?44yo&A_-H%!fhY9V`zAK=B~QXZ0%a6OITJ3hobMg@y340uxv+omwHdRlt|pTS!q4COwyPk+vK@hk4<9#Hbn{T1vGVoW?%^tw z)-VCz?4*~Ke*EUV0w4ya#r&z;0oWh{dYBB>`sF$)DJk<-B!sXXYPGz}`s?qBMzL$t zM)&p0mSPofY3a2J*+dR2Bd+YUL!YU%+%G#vcI_4!CyRoS& z=JBG?LIO}2KG&^%5^0EAT6fNVsS7iR!Ji0zQ8zI;m&Z4rUBo{=Y?YR5-^-@>?_tfW-Tc;v1>ZH8&-ui zm^~irmtb{C+fBb|hQJK9p)y}-3lSmaN3@{!-5`{;vwhbOLLn8gNZ9d6*AMK~+czVk z2Fx&RM5J*5t9Hb_*Dpz!C{B<1I!QKfV0a>j&wP6pkL_DV(PLss11C|1nZ-qM?*k7$ zIh$GeswIJDPs-Z0%$nq%E;aNfMN#Acb_T@eMAx8Unz`nVV6BJ8YT81T1h@k(6avV$ z&^(&y5ip@N<4U`p-l#N=4#Ym$b$3Hmg(Dty_E4xNj2m`sYXiYKh&0~jmx`!TH9w4W z3T7tV@GAr$ozZaU%nJVEYcn`LT12CYDM^?Tb@Z##PlPa~APLCsm0K{Z{KWF!E47B1^ zi~^+iiWqJXTBQ%BUoPhYY+W>tu7<)nHpC;I9%fioaP1}AN~uz4OMA8m&^EyW4o6Eb z1|mXnYNYX7pCF_b3;3^tOZenB=a9~tzD^?{QHR?;d}nHKeBw?6RCz^<#wu3EAS+|G z^nh`m__=rABsFC_1Wz0}l2O10{WX$y{EvV|n6)ucHMq)8nwU#3Oz%qpY|#QzsvI4! z4A~x`fdU$Frf2{+*4_PNjA27p)RQp#x?>uJK10Tz10u(P6@L?rxICxPJxjur@O%Ng?GJwce`w_G)TDKY%a%qkgUc9!HxVsx zqDK_{m6TMuYU?jUwuJ63cX>R<7_QjTheRX{-$UN4v3Sg8A7A|F;{;Kq>TiX~GoHWG zFbOjYdHmZ`^LXS3%P<1O^(A3Scp{xHh_8R=$xmlB?Lhefa`wy23M<40Kmo!$9(|J> zwa$5=%4)_j@|)b^v~eZEbap8T`Rsn-*p_|!A@&}`z;X#+Hktr*3oY1hV*m?h+PBVk zfzgwQmD{FOjRg_j(!UeIyVNw`xp=_uHQO;(i5i%>Wf2`S3;a!z#)RACNl!c4mxIp*GxgzTgr=2nC0 ze`8?CP*6XF0fh~XyHJ(edZBSii5rLk;bpX^tMWy7L0%~!q=cXwfB{>*bv45Pb8c11TMtb=UaxA{AI7>{S`E2vCn_zpDXt zgxS>A3I)6n_hsfIFc6^@x|FQL3|Ros4HLr?6|ao5%3~Z4hj7jIO_kr>GP9N5tnICJ z*Rtkj@$w6onO%auH0SdB1V*QGxcjjbj+|{hDN7nRiKduIrNr|u?f=G7q3{R+09SyB z?Pcagxv?~HzUyahdCOKgVx56!2G689QPMLp#>?vzHS3dV@W#;^7;@$KvV&Qwmt+B$ z$H$3cN;wQ(oEoX?)oB=niP=2v`Of^R$Wjufgl~NCv!BboeDuU!dD9%S-s)liu3xGE7(^ip zeQ~OqEKS19Vjg!tmcr4I)xXS0!j$lhpS|NxM+e8wf7DKJq}HYBP#-1z8TB5J(R zuwNrwsli;P;3_{n-vvg@R}`^F6a(=AXB>ym4q$qIIdJCX#fD~>7#K;GJxk6j3(C=u zitBf7Z9!n&W8hTSFGy_?EU>dBU@a$;PU@YfaJLv_d zG#-Pat(SiTxu4a8OU5+!F8pEm4nUOL3*WW_xw^355BmF=Z~~E2}=^DL}2{!JzrcN zK0p2ujc68O+sn)lU=jpy)vx^DTe{^abp{@LJ- zS*Ev&9KF66B?D0k=D%u&hS}vA96d7$g|9EOdVDwu-LBr}j%yc0xbgB!5N`H+f)Ht( z0!tuz9@s7?A=7|1U6H|C&T4q#O0;JJh^bG(5x zC=h{`>X!0LSj;Zs%=uYp#`;P8;hf>6qi3O%yh=wnmH^y%#idR3V_7i1i?=|sUIz{< zfWo28jYDWw*fm!$@Z!-GeB-%vZL+K+Oo@w!=MNngzx~O-|LR;W_bm!X1QZ2W5>ON+ zEQq~X&aKYC(D*n~h5QIW!ng5rhGfIRy$u5li}0%;YnyvB1Xf6RX2m+uBeY6ssn5%r zTuh>%7qOJdV|*sPZq_jumU1{fHe+i^u&VmYL?n#eJGc562A^*gDy)!fqlprPNMj0! z1d5ZV0me|&OuTY>1z&h#9_DM*%3c~ZiI(x)fkWD%BPaf>AjA+w<3K?Gd6Qpx0bB~B z_374|uk4rAC7lADXwt*zwk6IKTi&fj{Sid4i~^fz_JOG@gMuSTW^+$Kb--QP?R&) z;+GH6bf*F2uoYi|S>ikhSsyN(Q%H~J6JVnG@j1vM%pd~*fswgUD`5t}iQy#HgFGH% z4BtOI3`MEWjwKLw_wPVlRafr`mZAz>fv&Fc!Bq}Yfa26Jh=63OfG<8dkD0~SHXJSq zQ)1QlAsfJ>D(Xc{E=+(k1_CfTHD4A1Sj(86U&7hR6o~9_tivs4 zV3uHk-^f9;UD{HA>CDVhp{J){=9iJqXt@8G1q_V6_G2yyQ)1N^OQ*%Y!$&@|Y?#jy z!U%~_qAMQVE$3H9fIoZu)C4h)UQMnH<*2_5D2WF!%n8)#`ZVqiMPSQ)4a2OZ%ZQWd zt|8mtk`}Uym|s~a*D5Y$3K*MSSQp-oL`-R6JyD=rW@(zo(8JjxsVUf#6{(2MhKq< z(k4)$fakj#s@0Uvuu&BJiHtk8;pyQj&kX=hj!eTe*KVrp$#YXk&MsOcz?8Zkn7c3C zfpAFm$c$KXnG@rgOOOyYtYD3pdWvph>jV+xUySzwl^EGrqi;#cz7= zt#1pIm^?1yJkYLFGJ$R?26B3GS`L#7ljV|W(rQ}F-2Eq(US3~IbnZki^aBIh4 zCHyFkj+f+03Dy74mp8hW5!Rwd6u>|r#=H(*M=ocQL$055#xQVp3c6t;q$+FXJ}oR| zvG>p!TV$QrCHoK&-gaew^?f5R>h*ckV(>RFtP5yB_6(C_C-H^H=b`BrXMI=_ro?N4 zXAT?^&m1^3D@UR;pzFpIIESy-{t)aCT`*6B089!2?l9NP#X?tI0V&|Q-Ub9)`FxYe zSIE-Gz56PRM#^2^5Z8lK6mkYj>?d%goMPZ?a0*9QVNXuDMrKAljlOOOoEVu}6QVx^U_PC}a|Z{l1Seka zT>?N?G>q$aZL7Ex(@_!`@d0@YKQd#hvK#S(lKISS^O8=4Oer3Sl(b zVt(kWe#;ZEB!Y$Fcy0rjsk&yxI=2u65~TUQ90Fk`J%e<1smi-7d2);~D4b#c@pDj> zi*IH*fCryGh@xh#(JC&Pu?)cOUE2|lM6v2x$g~hlQ9e?PdEI# zAj06-4Dtods%gB4I5R$nea9_tn0t7aCK29o%@yEe3pY@s5%U`HntL4$a<@Dt7k~%$ z9K-pU>_rc4OAk{*LSoejsXUE_b(kgXImIT-;FuA@L#xN#U$qo|dVT4FZx(q7KdH1O z!^t@Y&JWa;WH<>E015>igQGLJn0}FA3OxMms}AqdoxC|?xcSO{pjiN*=??Zz(MAm8 zzjkMOA%n+X7+4eQz>+W}BqUai{=VL2-7pKD?Yv4K^{Idoyqtu z`b(*mxMjd5Gw1KH_NJRU&drrT-$JQTIfZ?&{PGCNrT@&+M5~hTN#Hz8Qw@)*Pa!rls7S)5j z8rSC$faw~!+GfU=>0v1OL{s~$5}}9uce=3FFK02IX&|s}uVWH`fv1q5N^C;7rG;>5a+7B_g$;^tJB#c9^7--e-e@;ObH2zwT_eLCqz~^ zGM2;T;ev!2(A%UY(St}=04$L3>i}ARFC@V9XjA_+K?Q`#^zHC+#&Krq3=E^OEL+Kw zn_tS}+~kEXNoD{ZdgfJ3rIr8yimG}N4+FzHuX%$@@0S+E(jx%W)sY-Ah6nc?Mmkei zGxJ;$ri6sVsO@svrt>T+4SIp zoZ{LC)JqdrV zyB{KL6pr;lqQn>;{_mq$TwYrO_L49qBqUZ1-4H@ml!9ebT&ybtu%&g0xTG*^sJQ-L zjm3qM>1%4 zeft})KuA&1H0@qmNb7-2eap07*qoM6N<$ Eg3gqyJpcdz literal 0 HcmV?d00001 diff --git a/packages/discord-components-core/static/skyralounge.gif b/packages/discord-components-core/static/skyralounge.gif new file mode 100644 index 0000000000000000000000000000000000000000..b3cfd1dee3d7800d6e5f549518580ab586992789 GIT binary patch literal 271190 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

_FkMWqxd(XtmeYSsZq@CPuZ8 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 Cu5i2n literal 0 HcmV?d00001 diff --git a/packages/discord-components-core/static/stencil.png b/packages/discord-components-core/static/stencil.png new file mode 100644 index 0000000000000000000000000000000000000000..feb5d040ce11b7e21cc11690bd5cf1eb4dfe605a GIT binary patch literal 5580 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 B1Xut7 literal 0 HcmV?d00001 diff --git a/packages/discord-components-core/static/thumbsup.svg b/packages/discord-components-core/static/thumbsup.svg new file mode 100644 index 0000000..595672d --- /dev/null +++ b/packages/discord-components-core/static/thumbsup.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/discord-components-core/stencil.config.ts b/packages/discord-components-core/stencil.config.ts new file mode 100644 index 0000000..b0e98b7 --- /dev/null +++ b/packages/discord-components-core/stencil.config.ts @@ -0,0 +1,31 @@ +import { Config } from '@stencil/core'; +import { reactOutputTarget } from '@stencil/react-output-target'; + +export const config: Config = { + namespace: 'derockdev-discord-components-core', + extras: { + experimentalImportInjection: true + }, + outputTargets: [ + reactOutputTarget({ + componentCorePackage: '@derockdev/discord-components-core', + proxiesFile: '../react/src/index.ts', + includeDefineCustomElements: true, + includePolyfills: false + }), + { + type: 'dist', + empty: true, + esmLoaderPath: '../loader' + }, + { + type: 'docs-readme', + strict: true + }, + { + type: 'www', + serviceWorker: null, + copy: [{ src: '../static', dest: 'static/' }] + } + ] +}; diff --git a/packages/discord-components-core/tsconfig.json b/packages/discord-components-core/tsconfig.json new file mode 100644 index 0000000..1608ad8 --- /dev/null +++ b/packages/discord-components-core/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "jsxFactory": "h", + "experimentalDecorators": true + }, + "include": ["src"] +} diff --git a/packages/discord-components-react/CHANGELOG.md b/packages/discord-components-react/CHANGELOG.md new file mode 100644 index 0000000..1b85c27 --- /dev/null +++ b/packages/discord-components-react/CHANGELOG.md @@ -0,0 +1,386 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [3.6.0](https://github.com/skyra-project/discord-components/compare/v3.5.0...v3.6.0) (2023-01-23) + +### Bug Fixes + +- update @stencil/core dependency ([df07642](https://github.com/skyra-project/discord-components/commit/df07642b48debf1ecbc05cceaeafd5cfed081c9a)) + +# [3.5.0](https://github.com/skyra-project/discord-components/compare/v3.4.1...v3.5.0) (2022-12-27) + +**Note:** Version bump only for package @skyra/discord-components-react + +## [3.4.1](https://github.com/skyra-project/discord-components/compare/v3.4.0...v3.4.1) (2022-08-06) + +**Note:** Version bump only for package @skyra/discord-components-react + +# [3.4.0](https://github.com/skyra-project/discord-components/compare/v3.3.1...v3.4.0) (2022-05-10) + +**Note:** Version bump only for package @skyra/discord-components-react + +## [3.3.1](https://github.com/skyra-project/discord-components/compare/v3.3.0...v3.3.1) (2022-04-25) + +### Bug Fixes + +- **core:** emit `[@vite-ignore](https://github.com/vite-ignore)` comments on dynamic imports ([ba84b9e](https://github.com/skyra-project/discord-components/commit/ba84b9ec4e8fe81ec452aba4c89b7b481b00ccaa)) +- **deps:** update all non-major dependencies ([#240](https://github.com/skyra-project/discord-components/issues/240)) ([e0e22fe](https://github.com/skyra-project/discord-components/commit/e0e22fe72158f1e9f92d61a5b04c58b7bf546de5)) + +# [3.3.0](https://github.com/skyra-project/discord-components/compare/v3.2.0...v3.3.0) (2022-04-06) + +### Features + +- add `discord-time` component ([#229](https://github.com/skyra-project/discord-components/issues/229)) ([cdf0810](https://github.com/skyra-project/discord-components/commit/cdf08108e9a54e11c75e050ff176a42715aceb49)) + +# [3.2.0](https://github.com/skyra-project/discord-components/compare/v3.1.1...v3.2.0) (2022-04-04) + +### Features + +- add new components to react bundle ([3055336](https://github.com/skyra-project/discord-components/commit/3055336043d0e80c106f13ca05377759383ec36a)) + +## [3.1.1](https://github.com/skyra-project/discord-components/compare/v3.1.0...v3.1.1) (2022-03-10) + +### Bug Fixes + +- rebuild react code ([e1d3766](https://github.com/skyra-project/discord-components/commit/e1d3766a1179ea70d41920ccf34786b27e96b6a7)) + +# [3.1.0](https://github.com/skyra-project/discord-components/compare/v3.0.1...v3.1.0) (2022-01-12) + +**Note:** Version bump only for package @skyra/discord-components-react + +## [3.0.1](https://github.com/skyra-project/discord-components/compare/v3.0.0...v3.0.1) (2022-01-08) + +### Bug Fixes + +- **react:** use createElement named import for better compatibility with Vite ([1d770da](https://github.com/skyra-project/discord-components/commit/1d770daa291ce9222428d228ed7a7f8f9fad6ee8)) + +# [3.0.0](https://github.com/skyra-project/discord-components/compare/v2.13.0...v3.0.0) (2022-01-08) + +### Bug Fixes + +- fixed embed description and footer disappearing when dynamically editing title ([bdec29c](https://github.com/skyra-project/discord-components/commit/bdec29c1999969a2ea0cf1198d3eb1986a80d674)) + +### BREAKING CHANGES + +- `discord-embed` no longer takes the properties `footer-image` and `timestamp`, they are moved to the `discord-embed-footer` component. +- The embed description now has to go into its own component, `discord-embed-description` + +```diff + +- Custom emojis in the embed description: ++ Custom emojis in the embed description: + +``` + +- The embed footer now has to go into its own component, `discord-embed-footer` + +```diff +- ++ +{ /* other embed components */ } +- Open source libraries to aid in the creation of Discord bots ++ ++ Open source libraries to aid in the creation of Discord bots ++ + +``` + +# [2.13.0](https://github.com/skyra-project/discord-components/compare/v2.12.1...v2.13.0) (2021-12-22) + +**Note:** Version bump only for package @skyra/discord-components-react + +## [2.12.1](https://github.com/skyra-project/discord-components/compare/v2.12.0...v2.12.1) (2021-12-06) + +**Note:** Version bump only for package @skyra/discord-components-react + +# [2.12.0](https://github.com/skyra-project/discord-components/compare/v2.11.6...v2.12.0) (2021-11-13) + +### Features + +- Add `discord-custom-emoji` component & custom emojis in embed titles ([#168](https://github.com/skyra-project/discord-components/issues/168)) ([61a808e](https://github.com/skyra-project/discord-components/commit/61a808e46f16d3ce9c7ea888e208cd1fcbe30e75)), closes [#163](https://github.com/skyra-project/discord-components/issues/163) + +## [2.11.6](https://github.com/skyra-project/discord-components/compare/v2.11.5...v2.11.6) (2021-11-08) + +### Bug Fixes + +- **react:** fix ESM loading ([8a43f53](https://github.com/skyra-project/discord-components/commit/8a43f5367b48d086bdd46c52d393547bc6209170)) + +## [2.11.5](https://github.com/skyra-project/discord-components/compare/v2.11.4...v2.11.5) (2021-11-08) + +### Bug Fixes + +- **react:** only output ESM bundle ([cf9da04](https://github.com/skyra-project/discord-components/commit/cf9da04318fc5013f8637f01bd4c733b617ad074)) + +## [2.11.4](https://github.com/skyra-project/discord-components/compare/v2.11.3...v2.11.4) (2021-11-08) + +### Bug Fixes + +- **docs:** update nextjs codesandbox link ([4d6382f](https://github.com/skyra-project/discord-components/commit/4d6382fe3538f85cd60ea8aa28e570023b536c98)) + +## [2.11.3](https://github.com/skyra-project/discord-components/compare/v2.11.3-alpha.3...v2.11.3) (2021-11-08) + +**Note:** Version bump only for package @skyra/discord-components-react + +## [2.11.3-alpha.3](https://github.com/skyra-project/discord-components/compare/v2.11.3-alpha.2...v2.11.3-alpha.3) (2021-11-08) + +### Bug Fixes + +- **react:** add dependency on tslib ([cc0b85e](https://github.com/skyra-project/discord-components/commit/cc0b85e23434611302bc1494aa2a76273912f6d1)) + +## [2.11.3-alpha.2](https://github.com/skyra-project/discord-components/compare/v2.11.3-alpha.1...v2.11.3-alpha.2) (2021-11-08) + +### Bug Fixes + +- **react:** no longer use esbuild for bundling ([d03ed4d](https://github.com/skyra-project/discord-components/commit/d03ed4d170493380d724d24268b195c1f4e4d71d)) + +## [2.11.3-alpha.1](https://github.com/skyra-project/discord-components/compare/v2.11.3-alpha.0...v2.11.3-alpha.1) (2021-11-08) + +### Bug Fixes + +- debump required nodejs engine to 14.0.0 ([310f9bc](https://github.com/skyra-project/discord-components/commit/310f9bc6cdcafe6fd0d7267ffff70539b981b4be)) + +## [2.11.3-alpha.0](https://github.com/skyra-project/discord-components/compare/v2.11.2...v2.11.3-alpha.0) (2021-11-08) + +**Note:** Version bump only for package @skyra/discord-components-react + +## [2.11.2](https://github.com/skyra-project/discord-components/compare/v2.11.1...v2.11.2) (2021-10-03) + +### Bug Fixes + +- re-fix react bundle. The output file _has_ to be mjs for this to all work ([946652b](https://github.com/skyra-project/discord-components/commit/946652bb6166e1cf06c681e3fb410ef92975914b)) + +### Reverts + +- Revert "fix(react): fixed output targets" ([129f14f](https://github.com/skyra-project/discord-components/commit/129f14f8aa2f335a7b37f2d2f068ea87623fce49)) + +## [2.11.1](https://github.com/skyra-project/discord-components/compare/v2.11.0...v2.11.1) (2021-10-03) + +### Bug Fixes + +- **react:** fixed output targets ([ba9faf1](https://github.com/skyra-project/discord-components/commit/ba9faf1ba0c04e89eba3e15341879cbc7dd65369)) + +# [2.11.0](https://github.com/skyra-project/discord-components/compare/v2.10.1-alpha.0...v2.11.0) (2021-10-02) + +### Features + +- Thread Accessories ([#150](https://github.com/skyra-project/discord-components/issues/150)) ([232f05d](https://github.com/skyra-project/discord-components/commit/232f05d915fef41486150e2db43589e9fc11c742)) + +## [2.10.1-alpha.0](https://github.com/skyra-project/discord-components/compare/v2.10.0...v2.10.1-alpha.0) (2021-09-21) + +### Bug Fixes + +- output react bundle as `.js` to fix a Webpack issue, not loading named imports of `.mjs` files ([bc166f6](https://github.com/skyra-project/discord-components/commit/bc166f6c80b1b0b491144c179bf1a1cc30b6d1b5)) + +# [2.10.0](https://github.com/skyra-project/discord-components/compare/v2.9.1...v2.10.0) (2021-09-12) + +### Features + +- add `discord-tenor-video` component ([#127](https://github.com/skyra-project/discord-components/issues/127)) ([c90dde0](https://github.com/skyra-project/discord-components/commit/c90dde02c23b8c9d25c676249518c60daeaf5d58)) + +## [2.9.1](https://github.com/skyra-project/discord-components/compare/v2.9.1-alpha.0...v2.9.1) (2021-09-12) + +**Note:** Version bump only for package @skyra/discord-components-react + +## [2.9.1-alpha.0](https://github.com/skyra-project/discord-components/compare/v2.9.0...v2.9.1-alpha.0) (2021-09-10) + +**Note:** Version bump only for package @skyra/discord-components-react + +# [2.9.0](https://github.com/skyra-project/discord-components/compare/v2.8.1...v2.9.0) (2021-09-05) + +**Note:** Version bump only for package @skyra/discord-components-react + +## [2.8.1](https://github.com/skyra-project/discord-components/compare/v2.8.0...v2.8.1) (2021-08-18) + +**Note:** Version bump only for package @skyra/discord-components-react + +# [2.8.0](https://github.com/skyra-project/discord-components/compare/v2.7.1...v2.8.0) (2021-08-18) + +### Features + +- add component buttons ([#110](https://github.com/skyra-project/discord-components/issues/110)) ([50f78c5](https://github.com/skyra-project/discord-components/commit/50f78c5643277164e791261f8a8af76a8d893015)) + +## [2.7.1](https://github.com/skyra-project/discord-components/compare/v2.7.0...v2.7.1) (2021-08-07) + +### Bug Fixes + +- **react:** minify build output ([932aaf8](https://github.com/skyra-project/discord-components/commit/932aaf875afb493c818487fd07f8c642e3935a02)) + +# [2.7.0](https://github.com/skyra-project/discord-components/compare/v2.6.0...v2.7.0) (2021-08-07) + +### Features + +- add system messages ([#105](https://github.com/skyra-project/discord-components/issues/105)) ([53440f4](https://github.com/skyra-project/discord-components/commit/53440f44cbe30d7458cc9e38f30c7636483b4a7a)) + +# [2.6.0](https://github.com/skyra-project/discord-components/compare/v2.5.0...v2.6.0) (2021-08-05) + +### Features + +- add replies (+ style changes) ([#103](https://github.com/skyra-project/discord-components/issues/103)) ([065e452](https://github.com/skyra-project/discord-components/commit/065e452f9d0386dfd1b426793aca4c7f07c9c0ae)) + +# [2.5.0](https://github.com/skyra-project/discord-components/compare/v2.4.0...v2.5.0) (2021-08-04) + +**Note:** Version bump only for package @skyra/discord-components-react + +# [2.4.0](https://github.com/skyra-project/discord-components/compare/v2.3.0...v2.4.0) (2021-07-25) + +**Note:** Version bump only for package @skyra/discord-components-react + +# [2.3.0](https://github.com/skyra-project/discord-components/compare/v2.2.0...v2.3.0) (2021-07-25) + +### Features + +- add reactions ([#96](https://github.com/skyra-project/discord-components/issues/96)) ([3bb19a6](https://github.com/skyra-project/discord-components/commit/3bb19a69912b9666f922c36eabe6fb959b4fc495)) + +# [2.2.0](https://github.com/skyra-project/discord-components/compare/v2.1.1...v2.2.0) (2021-07-22) + +### Features + +- add invite and attachments container components ([#94](https://github.com/skyra-project/discord-components/issues/94)) ([3b782a0](https://github.com/skyra-project/discord-components/commit/3b782a0147a46ce8779bd7387786a07fdc94f5ac)) + +## [2.1.1](https://github.com/skyra-project/discord-components/compare/v2.1.0...v2.1.1) (2021-07-10) + +### Bug Fixes + +- **readme:** update urls and add nextJS demo ([551f9e7](https://github.com/skyra-project/discord-components/commit/551f9e763a48b0854450054404476e6d641a77d3)) + +# [2.1.0](https://github.com/skyra-project/discord-components/compare/v2.0.9...v2.1.0) (2021-06-26) + +**Note:** Version bump only for package @skyra/discord-components-react + +## [2.0.9](https://github.com/skyra-project/discord-components/compare/v2.0.8...v2.0.9) (2021-06-21) + +**Note:** Version bump only for package @skyra/discord-components-react + +## [2.0.8](https://github.com/skyra-project/discord-components/compare/v2.0.7...v2.0.8) (2021-06-21) + +### Bug Fixes + +- **docs:** remove default font from ToC ([82a1281](https://github.com/skyra-project/discord-components/commit/82a1281e84c51287ad01282d399c1be530d8ab2d)) + +## [2.0.6](https://github.com/skyra-project/discord-components/compare/v2.0.5...v2.0.6) (2021-05-19) + +### Bug Fixes + +- specify sideEffects and fix `es2015` and `es2017` file paths ([b759b3c](https://github.com/skyra-project/discord-components/commit/b759b3c4ca9e505b49592d4152f1b5ada4876cc5)) + +## [2.0.5](https://github.com/skyra-project/discord-components/compare/v2.0.4...v2.0.5) (2021-05-15) + +**Note:** Version bump only for package @skyra/discord-components-react + +## [2.0.4](https://github.com/skyra-project/discord-components/compare/v2.0.3...v2.0.4) (2021-05-15) + +### Bug Fixes + +- change links from discord-message-components to discord-components ([5a8e1e1](https://github.com/skyra-project/discord-components/commit/5a8e1e1e0b3a34020a91f0dae9464141195d8fab)) + +## [2.0.3](https://github.com/skyra-project/discord-components/compare/v2.0.3-alpha.3...v2.0.3) (2021-05-15) + +**Note:** Version bump only for package @skyra/discord-components-react + +## [2.0.3-alpha.3](https://github.com/skyra-project/discord-components/compare/v2.0.3-alpha.2...v2.0.3-alpha.3) (2021-05-15) + +**Note:** Version bump only for package @skyra/discord-components-react + +## [2.0.3-alpha.2](https://github.com/skyra-project/discord-components/compare/v2.0.3-alpha.1...v2.0.3-alpha.2) (2021-05-15) + +**Note:** Version bump only for package @skyra/discord-components-react + +## [2.0.3-alpha.1](https://github.com/skyra-project/discord-components/compare/v2.0.3-alpha.0...v2.0.3-alpha.1) (2021-05-15) + +### Bug Fixes + +- fixed package bundling ([11d2627](https://github.com/skyra-project/discord-components/commit/11d2627bad707a1997e286a02b3004035dfdb306)) + +### Features + +- use whitney font as default font ([d7c9267](https://github.com/skyra-project/discord-components/commit/d7c9267a7680df5a3b8c7dbab5e14f673ada162b)) + +## [2.0.3-alpha.0](https://github.com/skyra-project/discord-components/compare/v2.0.2...v2.0.3-alpha.0) (2021-03-20) + +### Bug Fixes + +- **react:** move core from peer to regular dependencies ([8d1e3ff](https://github.com/skyra-project/discord-components/commit/8d1e3ff85a519b27f5590d9f01e98111de7695ae)) +- fixed readmes and such ([bdb8846](https://github.com/skyra-project/discord-components/commit/bdb8846db2ded36567ef624ddddedf95f59e549b)) + +## [2.0.2](https://github.com/skyra-project/discord-components/compare/v2.0.1...v2.0.2) (2020-10-26) + +### Bug Fixes + +- **react:** allow peer dependency of React 17 and Core 2 ([ae5fb27](https://github.com/skyra-project/discord-components/commit/ae5fb278643f68714bc646697e97269686517eb3)) + +## [2.0.1](https://github.com/skyra-project/discord-components/compare/v2.0.0...v2.0.1) (2020-10-07) + +**Note:** Version bump only for package @skyra/discord-components-react + +# [2.0.0](https://github.com/skyra-project/discord-components/compare/v1.3.0...v2.0.0) (2020-09-05) + +### Features + +- bumped stencil-core to v2 ([59ef71e](https://github.com/skyra-project/discord-components/commit/59ef71e48ac786edb35b7c52523206104796a9f0)), closes [/github.com/ionic-team/stencil/blob/master/CHANGELOG.md#-200-2020-08-31](https://github.com//github.com/ionic-team/stencil/blob/master/CHANGELOG.md/issues/-200-2020-08-31) [#12](https://github.com/skyra-project/discord-components/issues/12) + +### BREAKING CHANGES + +- IE11, Edge 16-18, Safari 10 and ES5 builds and support for them is fully removed + now. Also some files are exported under different names in core. For a full list see + +# [1.3.0](https://github.com/skyra-project/discord-components/compare/v1.2.2...v1.3.0) (2020-07-26) + +### Features + +- rename master branch to main ([0bc3666](https://github.com/skyra-project/discord-components/commit/0bc36663a83ab55df4ebb96fc9c69d6809008934)) + +## [1.2.2](https://github.com/skyra-project/discord-components/compare/v1.2.1...v1.2.2) (2020-07-13) + +**Note:** Version bump only for package @skyra/discord-components-react + +## [1.2.1](https://github.com/skyra-project/discord-components/compare/v1.2.0...v1.2.1) (2020-07-08) + +**Note:** Version bump only for package @skyra/discord-components-react + +# [1.2.0](https://github.com/skyra-project/discord-components/compare/v1.1.4...v1.2.0) (2020-07-07) + +**Note:** Version bump only for package @skyra/discord-components-react + +## [1.1.4](https://github.com/skyra-project/discord-components/compare/v1.1.3...v1.1.4) (2020-07-06) + +**Note:** Version bump only for package @skyra/discord-components-react + +## [1.1.3](https://github.com/skyra-project/discord-components/compare/v1.1.2...v1.1.3) (2020-07-06) + +**Note:** Version bump only for package @skyra/discord-components-react + +## [1.1.2](https://github.com/skyra-project/discord-components/compare/v1.1.1...v1.1.2) (2020-06-27) + +### Bug Fixes + +- bump package, regenerate react output ([07af3cc](https://github.com/skyra-project/discord-components/commit/07af3cc4e3ab3df728c4ed91341af2e7a5db3239)) + +## [1.1.1](https://github.com/skyra-project/discord-components/compare/v1.1.0...v1.1.1) (2020-06-06) + +### Bug Fixes + +- bump packages, fixing some stenciljs bugs ([2ac34a9](https://github.com/skyra-project/discord-components/commit/2ac34a9abca911e1abffc9671cb75cb24357335a)) + +# [1.1.0](https://github.com/skyra-project/discord-components/compare/v1.0.1...v1.1.0) (2020-05-19) + +**Note:** Version bump only for package @skyra/discord-components-react + +## [1.0.1](https://github.com/skyra-project/discord-components/compare/v1.0.0...v1.0.1) (2020-05-10) + +**Note:** Version bump only for package @skyra/discord-components-react + +# [1.0.0](https://github.com/skyra-project/discord-components/compare/v1.0.0-alpha.1...v1.0.0) (2020-05-10) + +**Note:** Version bump only for package @skyra/discord-components-react + +# [1.0.0-alpha.1](https://github.com/skyra-project/discord-components/compare/v1.0.0-alpha.0...v1.0.0-alpha.1) (2020-05-10) + +**Note:** Version bump only for package @skyra/discord-components-react + +# 1.0.0-alpha.0 (2020-05-10) + +### Features + +- create packages ([1ad5856](https://github.com/skyra-project/discord-components/commit/1ad58560916d3988e8dffc58ad97a52828ff5d35)) diff --git a/packages/discord-components-react/README.md b/packages/discord-components-react/README.md new file mode 100644 index 0000000..c0c5d99 --- /dev/null +++ b/packages/discord-components-react/README.md @@ -0,0 +1,291 @@ +# `@derockdev/discord-components-react` +A fork of [@skyra/discord-components-react](https://github.com/skyra-project/discord-components) designed for use in [discord-html-transcripts](https://github.com/itzderock/discord-html-transcripts) + +## Changes +- Adds all the new components in `@derockdev/discord-components-core` + +## Original README + +

+ +# @skyra/discord-components-react + +**React bindings for [@skyra/discord-components-core](https://github.com/skyra-project/discord-components/tree/main/packages/core)** + +[![License](https://img.shields.io/github/license/skyra-project/discord-components?logo=github&maxAge=3600&style=flat-square)](https://github.com/skyra-project/discord-components/blob/main/LICENSE.md) +[![Patreon](https://img.shields.io/badge/donate-patreon-F96854.svg?logo=patreon)](https://donate.skyra.pw/patreon) + +[![npm](https://img.shields.io/npm/v/@skyra/discord-components-react?color=crimson&logo=npm&style=flat-square&label=@skyra/discord-components-react)](https://www.npmjs.com/package/@skyra/discord-components-react) +[![npm](https://img.shields.io/npm/dt/@skyra/discord-components-react.svg?maxAge=3600&logo=npm)](https://www.npmjs.com/package/@skyra/discord-components-react) +[![npm](https://img.shields.io/bundlephobia/min/@skyra/discord-components-react?label=minified&logo=webpack&maxAge=3600)](https://bundlephobia.com/result?p=@skyra/discord-components-react) +[![Stencil](https://img.shields.io/badge/-Built%20With%20Stencil-16161d.svg?logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTIgNTEyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI%2BCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI%2BCgkuc3Qwe2ZpbGw6I0ZGRkZGRjt9Cjwvc3R5bGU%2BCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik00MjQuNywzNzMuOWMwLDM3LjYtNTUuMSw2OC42LTkyLjcsNjguNkgxODAuNGMtMzcuOSwwLTkyLjctMzAuNy05Mi43LTY4LjZ2LTMuNmgzMzYuOVYzNzMuOXoiLz4KPHBhdGggY2xhc3M9InN0MCIgZD0iTTQyNC43LDI5Mi4xSDE4MC40Yy0zNy42LDAtOTIuNy0zMS05Mi43LTY4LjZ2LTMuNkgzMzJjMzcuNiwwLDkyLjcsMzEsOTIuNyw2OC42VjI5Mi4xeiIvPgo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNNDI0LjcsMTQxLjdIODcuN3YtMy42YzAtMzcuNiw1NC44LTY4LjYsOTIuNy02OC42SDMzMmMzNy45LDAsOTIuNywzMC43LDkyLjcsNjguNlYxNDEuN3oiLz4KPC9zdmc%2BCg%3D%3D&colorA=16161d)](https://stenciljs.com) + +[![Support Server](https://discord.com/api/guilds/254360814063058944/embed.png?style=banner2)](https://join.skyra.pw) + +
+ +--- + +**_Table of Contents_** + +- [@skyra/discord-components-react](#skyradiscord-components-react) + - [Description](#description) + - [Features](#features) + - [Installation](#installation) + - [Usage](#usage) + - [Live Demo (Create React App)](#live-demo-create-react-app) + - [Live Demo (NextJS)](#live-demo-nextjs) + * [Sample code](#sample-code) + - [Notes](#notes) + - [TypeScript module augments](#typescript-module-augments) + - [Avatar shortcuts](#avatar-shortcuts) + - [Profile shortcuts](#profile-shortcuts) + - [Theming](#theming) + - [Components notes](#components-notes) + - [DiscordMessages component](#discordmessages-component) + - [DiscordMention component](#discordmention-component) + - [DiscordEmbed component](#discordembed-component) + - [EmbedFields component](#embedfields-component) + - [EmbedField component](#embedfield-component) + - [Screenshots](#screenshots) + - [Dark Mode](#dark-mode) + - [Light Mode](#light-mode) + - [Contributors](#contributors) + +## Description + +Discord message components to easily build and display fake Discord messages on your webpage. + +**This is an adaptation of [wc-discord-message] from [Danktuary]** + +## Features + +- Design modelled after [Discord](https://discord.com/) itself +- Comfy and compact mode support +- Dark and light themes support +- Set the message author's username, avatar (use defaults or provide your own), role color, and "bot" tag status +- Display fake user, role, and channel mentions +- Complete embed support +- Simple syntax! + +## Installation + +```bash +yarn add @skyra/discord-components-core @skyra/discord-components-react +# or npm install @skyra/discord-components-core @skyra/discord-components-react +``` + +## Usage + +#### Live Demo (Create React App) + +[![Edit Button](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/discord-components-create-react-app-64k90) + +#### Live Demo (NextJS) + +[![Edit Button](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/discord-components-nextjs-ovqfu) + +### Sample code + +The syntax is kept fairly simple. Here's a basic example of a regular conversation: + +```tsx + + Hey guys, I'm new here! Glad to be able to join you all! + + Hi, I'm new here too! + + + Hey, User and Dawn. Welcome to our server! + + +``` + +## Notes + +### TypeScript module augments + +This module uses a custom object on the browser `window` for configuration. In order to this you will need to include the following snippet in your source code when working in TypeScript: + +```ts +import type { DiscordMessageOptions } from '@skyra/discord-components-core/dist/types/options'; + +declare global { + interface Window { + $discordMessage: DiscordMessageOptions; + } +} +``` + +### Avatar shortcuts + +The current avatar shortcut strings available are "blue" (default), "gray", "green", "orange", and "red". These shortcuts map to the following image links: + +```json +{ + "blue": "https://cdn.discordapp.com/attachments/654503812593090602/665721745466195978/blue.png", + "gray": "https://cdn.discordapp.com/attachments/654503812593090602/665721746569166849/gray.png", + "green": "https://cdn.discordapp.com/attachments/654503812593090602/665721748431306753/green.png", + "orange": "https://cdn.discordapp.com/attachments/654503812593090602/665721750201434138/orange.png", + "red": "https://cdn.discordapp.com/attachments/654503812593090602/665721752277483540/red.png" +} +``` + +If you want to add to or override the shortcuts, you can set them via `window.$discordMessage.avatars`. + +```ts +window.$discordMessage = { + avatars: { + default: 'blue', + skyra: 'https://github.com/NM-EEA-Y.png', + djs: require('./assets/discord-avatar-djs.png') // You can use require syntax as well + } +}; +``` + +### Profile shortcuts + +Sometimes you'll want to use the same message data across multiple messages. You can do so by providing an object of profiles in `window.$discordMessage.profiles`. + +```ts +window.$discordMessage = { + profiles: { + skyra: { + author: 'Skyra', + avatar: 'https://github.com/NM-EEA-Y.png', + bot: true, + verified: true, + roleColor: '#1e88e5' + }, + favna: { + author: 'Favna', + avatar: 'https://github.com/favna.png', + roleColor: '#ff0000' + } + } +}; +``` + +And then in your React code: + +```tsx + + + Welcome to our server, Favna! + + Hey, glad to be here! + +``` + +### Theming + +Each of the components accepts the standard HTML properties for passing styling, such as `className` for passing CSS classes (JSS / CSS / SCSS etc.) or `style` to pass inline style. + +You can also pass your own custom HTML tags, for example set a `data-qa` to be able to navigate to the component in your unit tests / end-to-end tests + +### Components notes + +Below are notes for a few certain components. If you want to see what props each component has, check their readme.md file in [the respective folder]. + +#### DiscordMessages component + +This is a wrapper for any child `` component. It must be used in order for messages to display properly. + +#### DiscordMention component + +If the default slot is left empty, the mention will be rendered as `'User'`, `'Role'`, or `'channel`', depending on the `type` prop given. + +#### DiscordEmbed component + +An embed that can be attached to the end of your messages. The default slot is used for the embed's description. The `footer` slot is used for the footer text. + +To ensure the embed gets displayed correctly inside your message, be sure to give it the proper `slot` attribute. + +```tsx + + Hi, I'm part of the normal message content. + + Hi, I'm part of the embed message content. + + +``` + +#### EmbedFields component + +A wrapper for any child `` components. Must be used in order for fields to display properly. To ensure the embed fields gets displayed correctly inside your embed, be sure to give it the proper `slot` attribute. + +```tsx + + + Hi, I'm part of the embed message content. + + + + + +``` + +#### EmbedField component + +At least 2 consecutive fields need to be marked as inline in order for them to actually display next to each other. The maximum amount of inline fields is 3, and drops to 2 if an embed thumbnail is used. + +```tsx + + + Hi, I'm part of the embed message content. + + + Field content. + + + Field content. + + + + +``` + +## Screenshots + +### Dark Mode + +**_A normal conversation_** + +![](https://raw.githubusercontent.com/skyra-project/discord-components/main/assets/dark_mode/normal_conversation.png) + +**_Compact mode_** + +![](https://raw.githubusercontent.com/skyra-project/discord-components/main/assets/dark_mode/compact_mode.png) + +**_With an embed_** + +![](https://raw.githubusercontent.com/skyra-project/discord-components/main/assets/dark_mode/with_embed.png) + +### Light Mode + +**_A normal conversation_** + +![](https://raw.githubusercontent.com/skyra-project/discord-components/main/assets/light_mode/normal_conversation.png) + +**_Compact mode_** + +![](https://raw.githubusercontent.com/skyra-project/discord-components/main/assets/light_mode/compact_mode.png) + +**_With an embed_** + +![](https://raw.githubusercontent.com/skyra-project/discord-components/main/assets/light_mode/with_embed.png) + +## Contributors + +Please make sure to read the [Contributing Guide][contributing] before making a pull request. + +Thank you to all the people who already contributed to Skyra Project! + + + + + +[contributing]: https://github.com/skyra-project/.github/blob/main/.github/CONTRIBUTING.md +[wc-discord-message]: https://github.com/Danktuary/wc-discord-message +[danktuary]: https://github.com/Danktuary +[the respective folder]: (https://github.com/skyra-project/discord-components/blob/main/packages/core/src/components/) diff --git a/packages/discord-components-react/package.json b/packages/discord-components-react/package.json new file mode 100644 index 0000000..e481948 --- /dev/null +++ b/packages/discord-components-react/package.json @@ -0,0 +1,67 @@ +{ + "name": "@derockdev/discord-components-react", + "version": "3.5.2", + "description": "React bindings for @derockdev/discord-components-core", + "author": "@derockdev", + "license": "MIT", + "main": "dist/index.js", + "module": "dist/index.mjs", + "typings": "dist/index.d.ts", + "exports": { + "import": "./dist/index.mjs", + "require": "./dist/index.js" + }, + "sideEffects": [ + "./dist/index.mjs", + "./dist/index.js" + ], + "homepage": "https://github.com/itzderock/discord-components/tree/main/packages/react#readme", + "scripts": { + "clean": "node scripts/clean.mjs", + "build": "pnpm clean && tsc && gen-esm-wrapper dist/index.js dist/index.mjs && replace-in-file --configFile=scripts/replaceDefaultMod.cjs" + }, + "dependencies": { + "@derockdev/discord-components-core": "^3.5.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "react": "16.8.x || 17.x || 18.x", + "react-dom": "16.8.x || 17.x || 18.x" + }, + "directories": { + "lib": "src" + }, + "files": [ + "dist", + "!dist/*.tsbuildinfo" + ], + "engines": { + "node": ">=v14.0.0" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/skyra-project/discord-components.git" + }, + "bugs": { + "url": "https://github.com/skyra-project/discord-components/issues" + }, + "keywords": [ + "skyra", + "typescript", + "ts", + "yarn", + "discord", + "bot", + "components", + "webcomponents", + "stencil", + "react" + ], + "devDependencies": { + "gen-esm-wrapper": "^1.1.3", + "replace-in-file": "^6.3.5" + } +} diff --git a/packages/discord-components-react/pnpm-lock.yaml b/packages/discord-components-react/pnpm-lock.yaml new file mode 100644 index 0000000..7a219b2 --- /dev/null +++ b/packages/discord-components-react/pnpm-lock.yaml @@ -0,0 +1,247 @@ +lockfileVersion: 5.4 + +specifiers: + '@derockdev/discord-components-core': ^3.4.1 + gen-esm-wrapper: ^1.1.3 + replace-in-file: ^6.3.5 + tslib: ^2.4.0 + +dependencies: + '@derockdev/discord-components-core': link:../core + tslib: 2.4.0 + +devDependencies: + gen-esm-wrapper: 1.1.3 + replace-in-file: 6.3.5 + +packages: + + /ansi-regex/5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-styles/4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /assert/1.5.0: + resolution: {integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==} + dependencies: + object-assign: 4.1.1 + util: 0.10.3 + dev: true + + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /chalk/4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /cliui/7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /concat-map/0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + dev: true + + /emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /fs.realpath/1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /gen-esm-wrapper/1.1.3: + resolution: {integrity: sha512-LNHZ+QpaCW/0VhABIbXn45V+P8kFvjjwuue9hbV23eOjuFVz6c0FE3z1XpLX9pSjLW7UmtCkXo5F9vhZWVs8oQ==} + hasBin: true + dependencies: + is-valid-identifier: 2.0.2 + dev: true + + /get-caller-file/2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /glob/7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.1 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /inflight/1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits/2.0.1: + resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} + dev: true + + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-valid-identifier/2.0.2: + resolution: {integrity: sha512-mpS5EGqXOwzXtKAg6I44jIAqeBfntFLxpAth1rrKbxtKyI6LPktyDYpHBI+tHlduhhX/SF26mFXmxQu995QVqg==} + dependencies: + assert: 1.5.0 + dev: true + + /minimatch/3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /object-assign/4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + + /once/1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /path-is-absolute/1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /replace-in-file/6.3.5: + resolution: {integrity: sha512-arB9d3ENdKva2fxRnSjwBEXfK1npgyci7ZZuwysgAp7ORjHSyxz6oqIjTEv8R0Ydl4Ll7uOAZXL4vbkhGIizCg==} + engines: {node: '>=10'} + hasBin: true + dependencies: + chalk: 4.1.2 + glob: 7.2.3 + yargs: 17.5.1 + dev: true + + /require-directory/2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + + /string-width/4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /strip-ansi/6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /tslib/2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + dev: false + + /util/0.10.3: + resolution: {integrity: sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==} + dependencies: + inherits: 2.0.1 + dev: true + + /wrap-ansi/7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrappy/1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /y18n/5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yargs-parser/21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + + /yargs/17.5.1: + resolution: {integrity: sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==} + engines: {node: '>=12'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: true diff --git a/packages/discord-components-react/scripts/clean.mjs b/packages/discord-components-react/scripts/clean.mjs new file mode 100644 index 0000000..cd5a100 --- /dev/null +++ b/packages/discord-components-react/scripts/clean.mjs @@ -0,0 +1,9 @@ +import { rm } from 'node:fs/promises'; + +const distFolder = new URL('../dist', import.meta.url); + +const options = { recursive: true, force: true }; + +await Promise.all([ + rm(distFolder, options) // +]); diff --git a/packages/discord-components-react/scripts/replaceDefaultMod.cjs b/packages/discord-components-react/scripts/replaceDefaultMod.cjs new file mode 100644 index 0000000..34f3fcb --- /dev/null +++ b/packages/discord-components-react/scripts/replaceDefaultMod.cjs @@ -0,0 +1,9 @@ +// eslint-disable-next-line @typescript-eslint/unbound-method, @typescript-eslint/no-var-requires +const { resolve } = require('path'); + +module.exports = { + from: 'export default mod;\n', + to: '', + files: [resolve(__dirname, '../dist/index.mjs')], + quiet: true +}; diff --git a/packages/discord-components-react/src/index.ts b/packages/discord-components-react/src/index.ts new file mode 100644 index 0000000..9bb67d7 --- /dev/null +++ b/packages/discord-components-react/src/index.ts @@ -0,0 +1,47 @@ +/* eslint-disable */ +/* tslint:disable */ +/* auto-generated react proxies */ +import { createReactComponent } from './react-component-lib'; + +import type { JSX } from '@derockdev/discord-components-core'; + +import { defineCustomElements } from '@derockdev/discord-components-core/loader'; + +defineCustomElements(); +export const DiscordActionRow = /*@__PURE__*/ createReactComponent('discord-action-row'); +export const DiscordAttachment = /*@__PURE__*/ createReactComponent('discord-attachment'); +export const DiscordAttachments = /*@__PURE__*/ createReactComponent('discord-attachments'); +export const DiscordBold = /*@__PURE__*/ createReactComponent('discord-bold'); +export const DiscordButton = /*@__PURE__*/ createReactComponent('discord-button'); +export const DiscordCodeBlock = /*@__PURE__*/ createReactComponent('discord-code-block'); +export const DiscordCommand = /*@__PURE__*/ createReactComponent('discord-command'); +export const DiscordCustomEmoji = /*@__PURE__*/ createReactComponent('discord-custom-emoji'); +export const DiscordEmbed = /*@__PURE__*/ createReactComponent('discord-embed'); +export const DiscordEmbedDescription = /*@__PURE__*/ createReactComponent( + 'discord-embed-description' +); +export const DiscordEmbedField = /*@__PURE__*/ createReactComponent('discord-embed-field'); +export const DiscordEmbedFields = /*@__PURE__*/ createReactComponent('discord-embed-fields'); +export const DiscordEmbedFooter = /*@__PURE__*/ createReactComponent('discord-embed-footer'); +export const DiscordHeader = /*@__PURE__*/ createReactComponent('discord-header'); +export const DiscordInlineCode = /*@__PURE__*/ createReactComponent('discord-inline-code'); +export const DiscordInvite = /*@__PURE__*/ createReactComponent('discord-invite'); +export const DiscordItalic = /*@__PURE__*/ createReactComponent('discord-italic'); +export const DiscordMention = /*@__PURE__*/ createReactComponent('discord-mention'); +export const DiscordMessage = /*@__PURE__*/ createReactComponent('discord-message'); +export const DiscordMessages = /*@__PURE__*/ createReactComponent('discord-messages'); +export const DiscordQuote = /*@__PURE__*/ createReactComponent('discord-quote'); +export const DiscordReaction = /*@__PURE__*/ createReactComponent('discord-reaction'); +export const DiscordReactions = /*@__PURE__*/ createReactComponent('discord-reactions'); +export const DiscordReply = /*@__PURE__*/ createReactComponent('discord-reply'); +export const DiscordSpoiler = /*@__PURE__*/ createReactComponent('discord-spoiler'); +export const DiscordSystemMessage = /*@__PURE__*/ createReactComponent( + 'discord-system-message' +); +export const DiscordTenorVideo = /*@__PURE__*/ createReactComponent('discord-tenor-video'); +export const DiscordThread = /*@__PURE__*/ createReactComponent('discord-thread'); +export const DiscordThreadMessage = /*@__PURE__*/ createReactComponent( + 'discord-thread-message' +); +export const DiscordTime = /*@__PURE__*/ createReactComponent('discord-time'); +export const DiscordUnderlined = /*@__PURE__*/ createReactComponent('discord-underlined'); diff --git a/packages/discord-components-react/src/react-component-lib/createComponent.tsx b/packages/discord-components-react/src/react-component-lib/createComponent.tsx new file mode 100644 index 0000000..d81e4f5 --- /dev/null +++ b/packages/discord-components-react/src/react-component-lib/createComponent.tsx @@ -0,0 +1,98 @@ +import React, { createElement } from 'react'; + +import { attachProps, camelToDashCase, createForwardRef, dashToPascalCase, isCoveredByReact, mergeRefs } from './utils'; + +export interface HTMLStencilElement extends HTMLElement { + componentOnReady(): Promise; +} + +interface StencilReactInternalProps extends React.HTMLAttributes { + forwardedRef: React.RefObject; + ref?: React.Ref; +} + +export const createReactComponent = ( + tagName: string, + ReactComponentContext?: React.Context, + manipulatePropsFunction?: (originalProps: StencilReactInternalProps, propsToPass: any) => ExpandedPropsTypes, + defineCustomElement?: () => void +) => { + if (defineCustomElement !== undefined) { + defineCustomElement(); + } + + const displayName = dashToPascalCase(tagName); + const ReactComponent = class extends React.Component> { + componentEl!: ElementType; + + setComponentElRef = (element: ElementType) => { + this.componentEl = element; + }; + + constructor(props: StencilReactInternalProps) { + super(props); + } + + componentDidMount() { + this.componentDidUpdate(this.props); + } + + componentDidUpdate(prevProps: StencilReactInternalProps) { + attachProps(this.componentEl, this.props, prevProps); + } + + render() { + const { children, forwardedRef, style, className, ref, ...cProps } = this.props; + + let propsToPass = Object.keys(cProps).reduce((acc: any, name) => { + const value = (cProps as any)[name]; + + if (name.startsWith('on') && name[2] === name[2].toUpperCase()) { + const eventName = name.substring(2).toLowerCase(); + if (typeof document !== 'undefined' && isCoveredByReact(eventName)) { + acc[name] = value; + } + } else { + // we should only render strings, booleans, and numbers as attrs in html. + // objects, functions, arrays etc get synced via properties on mount. + const type = typeof value; + + if (type === 'string' || type === 'boolean' || type === 'number') { + acc[camelToDashCase(name)] = value; + } + } + return acc; + }, {}); + + if (manipulatePropsFunction) { + propsToPass = manipulatePropsFunction(this.props, propsToPass); + } + + const newProps: Omit, 'forwardedRef'> = { + ...propsToPass, + ref: mergeRefs(forwardedRef, this.setComponentElRef), + style + }; + + /** + * We use createElement here instead of + * React.createElement to work around a + * bug in Vite (https://github.com/vitejs/vite/issues/6104). + * React.createElement causes all elements to be rendered + * as instead of the actual Web Component. + */ + return createElement(tagName, newProps, children); + } + + static get displayName() { + return displayName; + } + }; + + // If context was passed to createReactComponent then conditionally add it to the Component Class + if (ReactComponentContext) { + ReactComponent.contextType = ReactComponentContext; + } + + return createForwardRef(ReactComponent, displayName); +}; diff --git a/packages/discord-components-react/src/react-component-lib/createOverlayComponent.tsx b/packages/discord-components-react/src/react-component-lib/createOverlayComponent.tsx new file mode 100644 index 0000000..007aba0 --- /dev/null +++ b/packages/discord-components-react/src/react-component-lib/createOverlayComponent.tsx @@ -0,0 +1,142 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; + +import { OverlayEventDetail } from './interfaces'; +import { StencilReactForwardedRef, attachProps, dashToPascalCase, defineCustomElement, setRef } from './utils'; + +interface OverlayElement extends HTMLElement { + present: () => Promise; + dismiss: (data?: any, role?: string | undefined) => Promise; +} + +export interface ReactOverlayProps { + children?: React.ReactNode; + isOpen: boolean; + onDidDismiss?: (event: CustomEvent) => void; + onDidPresent?: (event: CustomEvent) => void; + onWillDismiss?: (event: CustomEvent) => void; + onWillPresent?: (event: CustomEvent) => void; +} + +export const createOverlayComponent = ( + tagName: string, + controller: { create: (options: any) => Promise }, + customElement?: any +) => { + defineCustomElement(tagName, customElement); + + const displayName = dashToPascalCase(tagName); + const didDismissEventName = `on${displayName}DidDismiss`; + const didPresentEventName = `on${displayName}DidPresent`; + const willDismissEventName = `on${displayName}WillDismiss`; + const willPresentEventName = `on${displayName}WillPresent`; + + type Props = OverlayComponent & + ReactOverlayProps & { + forwardedRef?: StencilReactForwardedRef; + }; + + let isDismissing = false; + + class Overlay extends React.Component { + overlay?: OverlayType; + el!: HTMLDivElement; + + constructor(props: Props) { + super(props); + if (typeof document !== 'undefined') { + this.el = document.createElement('div'); + } + this.handleDismiss = this.handleDismiss.bind(this); + } + + static get displayName() { + return displayName; + } + + componentDidMount() { + if (this.props.isOpen) { + this.present(); + } + } + + componentWillUnmount() { + if (this.overlay) { + this.overlay.dismiss(); + } + } + + handleDismiss(event: CustomEvent>) { + if (this.props.onDidDismiss) { + this.props.onDidDismiss(event); + } + setRef(this.props.forwardedRef, null); + } + + shouldComponentUpdate(nextProps: Props) { + // Check if the overlay component is about to dismiss + if (this.overlay && nextProps.isOpen !== this.props.isOpen && !nextProps.isOpen) { + isDismissing = true; + } + + return true; + } + + async componentDidUpdate(prevProps: Props) { + if (this.overlay) { + attachProps(this.overlay, this.props, prevProps); + } + + if (prevProps.isOpen !== this.props.isOpen && this.props.isOpen === true) { + this.present(prevProps); + } + if (this.overlay && prevProps.isOpen !== this.props.isOpen && this.props.isOpen === false) { + await this.overlay.dismiss(); + isDismissing = false; + + /** + * Now that the overlay is dismissed + * we need to render again so that any + * inner components will be unmounted + */ + this.forceUpdate(); + } + } + + async present(prevProps?: Props) { + const { children, isOpen, onDidDismiss, onDidPresent, onWillDismiss, onWillPresent, ...cProps } = this.props; + const elementProps = { + ...cProps, + ref: this.props.forwardedRef, + [didDismissEventName]: this.handleDismiss, + [didPresentEventName]: (e: CustomEvent) => this.props.onDidPresent && this.props.onDidPresent(e), + [willDismissEventName]: (e: CustomEvent) => this.props.onWillDismiss && this.props.onWillDismiss(e), + [willPresentEventName]: (e: CustomEvent) => this.props.onWillPresent && this.props.onWillPresent(e) + }; + + this.overlay = await controller.create({ + ...elementProps, + component: this.el, + componentProps: {} + }); + + setRef(this.props.forwardedRef, this.overlay); + attachProps(this.overlay, elementProps, prevProps); + + await this.overlay.present(); + } + + render() { + /** + * Continue to render the component even when + * overlay is dismissing otherwise component + * will be hidden before animation is done. + */ + return ReactDOM.createPortal(this.props.isOpen || isDismissing ? this.props.children : null, this.el); + } + } + + return React.forwardRef((props, ref) => { + return ; + }); +}; diff --git a/packages/discord-components-react/src/react-component-lib/index.ts b/packages/discord-components-react/src/react-component-lib/index.ts new file mode 100644 index 0000000..85e81ad --- /dev/null +++ b/packages/discord-components-react/src/react-component-lib/index.ts @@ -0,0 +1,2 @@ +export { createReactComponent } from './createComponent'; +export { createOverlayComponent } from './createOverlayComponent'; diff --git a/packages/discord-components-react/src/react-component-lib/interfaces.ts b/packages/discord-components-react/src/react-component-lib/interfaces.ts new file mode 100644 index 0000000..0e7986a --- /dev/null +++ b/packages/discord-components-react/src/react-component-lib/interfaces.ts @@ -0,0 +1,34 @@ +// General types important to applications using stencil built components +export interface EventEmitter { + emit: (data?: T) => CustomEvent; +} + +export interface StyleReactProps { + class?: string; + className?: string; + style?: { [key: string]: any }; +} + +export interface OverlayEventDetail { + data?: T; + role?: string; +} + +export interface OverlayInterface { + el: HTMLElement; + animated: boolean; + keyboardClose: boolean; + overlayIndex: number; + presented: boolean; + + enterAnimation?: any; + leaveAnimation?: any; + + didPresent: EventEmitter; + willPresent: EventEmitter; + willDismiss: EventEmitter; + didDismiss: EventEmitter; + + present(): Promise; + dismiss(data?: any, role?: string): Promise; +} diff --git a/packages/discord-components-react/src/react-component-lib/utils/attachProps.ts b/packages/discord-components-react/src/react-component-lib/utils/attachProps.ts new file mode 100644 index 0000000..94a1574 --- /dev/null +++ b/packages/discord-components-react/src/react-component-lib/utils/attachProps.ts @@ -0,0 +1,106 @@ +import { camelToDashCase } from './case'; + +export const attachProps = (node: HTMLElement, newProps: any, oldProps: any = {}) => { + // some test frameworks don't render DOM elements, so we test here to make sure we are dealing with DOM first + if (node instanceof Element) { + // add any classes in className to the class list + const className = getClassName(node.classList, newProps, oldProps); + if (className !== '') { + node.className = className; + } + + Object.keys(newProps).forEach((name) => { + if (name === 'children' || name === 'style' || name === 'ref' || name === 'class' || name === 'className' || name === 'forwardedRef') { + return; + } + if (name.startsWith('on') && name[2] === name[2].toUpperCase()) { + const eventName = name.substring(2); + const eventNameLc = eventName[0].toLowerCase() + eventName.substring(1); + + if (!isCoveredByReact(eventNameLc)) { + syncEvent(node, eventNameLc, newProps[name]); + } + } else { + (node as any)[name] = newProps[name]; + const propType = typeof newProps[name]; + if (propType === 'string') { + node.setAttribute(camelToDashCase(name), newProps[name]); + } + } + }); + } +}; + +export const getClassName = (classList: DOMTokenList, newProps: any, oldProps: any) => { + const newClassProp: string = newProps.className || newProps.class; + const oldClassProp: string = oldProps.className || oldProps.class; + // map the classes to Maps for performance + const currentClasses = arrayToMap(classList); + const incomingPropClasses = arrayToMap(newClassProp ? newClassProp.split(' ') : []); + const oldPropClasses = arrayToMap(oldClassProp ? oldClassProp.split(' ') : []); + const finalClassNames: string[] = []; + // loop through each of the current classes on the component + // to see if it should be a part of the classNames added + currentClasses.forEach((currentClass) => { + if (incomingPropClasses.has(currentClass)) { + // add it as its already included in classnames coming in from newProps + finalClassNames.push(currentClass); + incomingPropClasses.delete(currentClass); + } else if (!oldPropClasses.has(currentClass)) { + // add it as it has NOT been removed by user + finalClassNames.push(currentClass); + } + }); + incomingPropClasses.forEach((s) => finalClassNames.push(s)); + return finalClassNames.join(' '); +}; + +/** + * Checks if an event is supported in the current execution environment. + * @license Modernizr 3.0.0pre (Custom Build) | MIT + */ +export const isCoveredByReact = (eventNameSuffix: string) => { + if (typeof document === 'undefined') { + return true; + } + const eventName = 'on' + eventNameSuffix; + let isSupported = eventName in document; + + if (!isSupported) { + const element = document.createElement('div'); + element.setAttribute(eventName, 'return;'); + isSupported = typeof (element as any)[eventName] === 'function'; + } + + return isSupported; +}; + +export const syncEvent = ( + node: Element & { __events?: { [key: string]: ((e: Event) => any) | undefined } }, + eventName: string, + newEventHandler?: (e: Event) => any +) => { + const eventStore = node.__events || (node.__events = {}); + const oldEventHandler = eventStore[eventName]; + + // Remove old listener so they don't double up. + if (oldEventHandler) { + node.removeEventListener(eventName, oldEventHandler); + } + + // Bind new listener. + node.addEventListener( + eventName, + (eventStore[eventName] = function handler(e: Event) { + if (newEventHandler) { + newEventHandler.call(this, e); + } + }) + ); +}; + +const arrayToMap = (arr: string[] | DOMTokenList) => { + const map = new Map(); + (arr as string[]).forEach((s: string) => map.set(s, s)); + return map; +}; diff --git a/packages/discord-components-react/src/react-component-lib/utils/case.ts b/packages/discord-components-react/src/react-component-lib/utils/case.ts new file mode 100644 index 0000000..3db4d21 --- /dev/null +++ b/packages/discord-components-react/src/react-component-lib/utils/case.ts @@ -0,0 +1,7 @@ +export const dashToPascalCase = (str: string) => + str + .toLowerCase() + .split('-') + .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1)) + .join(''); +export const camelToDashCase = (str: string) => str.replace(/([A-Z])/g, (m: string) => `-${m[0].toLowerCase()}`); diff --git a/packages/discord-components-react/src/react-component-lib/utils/dev.ts b/packages/discord-components-react/src/react-component-lib/utils/dev.ts new file mode 100644 index 0000000..4f271a3 --- /dev/null +++ b/packages/discord-components-react/src/react-component-lib/utils/dev.ts @@ -0,0 +1,14 @@ +export const isDevMode = () => { + return process && process.env && process.env.NODE_ENV === 'development'; +}; + +const warnings: { [key: string]: boolean } = {}; + +export const deprecationWarning = (key: string, message: string) => { + if (isDevMode()) { + if (!warnings[key]) { + console.warn(message); + warnings[key] = true; + } + } +}; diff --git a/packages/discord-components-react/src/react-component-lib/utils/index.tsx b/packages/discord-components-react/src/react-component-lib/utils/index.tsx new file mode 100644 index 0000000..d7ac53b --- /dev/null +++ b/packages/discord-components-react/src/react-component-lib/utils/index.tsx @@ -0,0 +1,43 @@ +import React from 'react'; + +import type { StyleReactProps } from '../interfaces'; + +export type StencilReactExternalProps = PropType & Omit, 'style'> & StyleReactProps; + +// This will be replaced with React.ForwardedRef when react-output-target is upgraded to React v17 +export type StencilReactForwardedRef = ((instance: T | null) => void) | React.MutableRefObject | null; + +export const setRef = (ref: StencilReactForwardedRef | React.Ref | undefined, value: any) => { + if (typeof ref === 'function') { + ref(value); + } else if (ref != null) { + // Cast as a MutableRef so we can assign current + (ref as React.MutableRefObject).current = value; + } +}; + +export const mergeRefs = (...refs: (StencilReactForwardedRef | React.Ref | undefined)[]): React.RefCallback => { + return (value: any) => { + refs.forEach((ref) => { + setRef(ref, value); + }); + }; +}; + +export const createForwardRef = (ReactComponent: any, displayName: string) => { + const forwardRef = (props: StencilReactExternalProps, ref: StencilReactForwardedRef) => { + return ; + }; + forwardRef.displayName = displayName; + + return React.forwardRef(forwardRef); +}; + +export const defineCustomElement = (tagName: string, customElement: any) => { + if (customElement !== undefined && typeof customElements !== 'undefined' && !customElements.get(tagName)) { + customElements.define(tagName, customElement); + } +}; + +export * from './attachProps'; +export * from './case'; diff --git a/packages/discord-components-react/tsconfig.json b/packages/discord-components-react/tsconfig.json new file mode 100644 index 0000000..76dbc14 --- /dev/null +++ b/packages/discord-components-react/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "module": "CommonJS", + "tsBuildInfoFile": "dist/.tsbuildinfo", + "importsNotUsedAsValues": "remove", + "declarationMap": true + }, + "include": ["src"] +} diff --git a/README.md b/packages/discord-html-transcripts/README.md similarity index 100% rename from README.md rename to packages/discord-html-transcripts/README.md diff --git a/package-lock.json b/packages/discord-html-transcripts/package-lock.json similarity index 100% rename from package-lock.json rename to packages/discord-html-transcripts/package-lock.json diff --git a/package.json b/packages/discord-html-transcripts/package.json similarity index 100% rename from package.json rename to packages/discord-html-transcripts/package.json diff --git a/src/generator/index.tsx b/packages/discord-html-transcripts/src/generator/index.tsx similarity index 100% rename from src/generator/index.tsx rename to packages/discord-html-transcripts/src/generator/index.tsx diff --git a/src/generator/renderers/attachment.tsx b/packages/discord-html-transcripts/src/generator/renderers/attachment.tsx similarity index 100% rename from src/generator/renderers/attachment.tsx rename to packages/discord-html-transcripts/src/generator/renderers/attachment.tsx diff --git a/src/generator/renderers/components.tsx b/packages/discord-html-transcripts/src/generator/renderers/components.tsx similarity index 100% rename from src/generator/renderers/components.tsx rename to packages/discord-html-transcripts/src/generator/renderers/components.tsx diff --git a/src/generator/renderers/content.tsx b/packages/discord-html-transcripts/src/generator/renderers/content.tsx similarity index 100% rename from src/generator/renderers/content.tsx rename to packages/discord-html-transcripts/src/generator/renderers/content.tsx diff --git a/src/generator/renderers/embed.tsx b/packages/discord-html-transcripts/src/generator/renderers/embed.tsx similarity index 100% rename from src/generator/renderers/embed.tsx rename to packages/discord-html-transcripts/src/generator/renderers/embed.tsx diff --git a/src/generator/renderers/message.tsx b/packages/discord-html-transcripts/src/generator/renderers/message.tsx similarity index 100% rename from src/generator/renderers/message.tsx rename to packages/discord-html-transcripts/src/generator/renderers/message.tsx diff --git a/src/generator/renderers/reply.tsx b/packages/discord-html-transcripts/src/generator/renderers/reply.tsx similarity index 100% rename from src/generator/renderers/reply.tsx rename to packages/discord-html-transcripts/src/generator/renderers/reply.tsx diff --git a/src/generator/renderers/systemMessage.tsx b/packages/discord-html-transcripts/src/generator/renderers/systemMessage.tsx similarity index 100% rename from src/generator/renderers/systemMessage.tsx rename to packages/discord-html-transcripts/src/generator/renderers/systemMessage.tsx diff --git a/src/index.ts b/packages/discord-html-transcripts/src/index.ts similarity index 100% rename from src/index.ts rename to packages/discord-html-transcripts/src/index.ts diff --git a/src/static/client.ts b/packages/discord-html-transcripts/src/static/client.ts similarity index 100% rename from src/static/client.ts rename to packages/discord-html-transcripts/src/static/client.ts diff --git a/src/types.ts b/packages/discord-html-transcripts/src/types.ts similarity index 100% rename from src/types.ts rename to packages/discord-html-transcripts/src/types.ts diff --git a/src/utils/buildProfiles.ts b/packages/discord-html-transcripts/src/utils/buildProfiles.ts similarity index 100% rename from src/utils/buildProfiles.ts rename to packages/discord-html-transcripts/src/utils/buildProfiles.ts diff --git a/src/utils/embeds.ts b/packages/discord-html-transcripts/src/utils/embeds.ts similarity index 100% rename from src/utils/embeds.ts rename to packages/discord-html-transcripts/src/utils/embeds.ts diff --git a/src/utils/extend.ts b/packages/discord-html-transcripts/src/utils/extend.ts similarity index 100% rename from src/utils/extend.ts rename to packages/discord-html-transcripts/src/utils/extend.ts diff --git a/src/utils/types.d.ts b/packages/discord-html-transcripts/src/utils/types.d.ts similarity index 100% rename from src/utils/types.d.ts rename to packages/discord-html-transcripts/src/utils/types.d.ts diff --git a/src/utils/utils.ts b/packages/discord-html-transcripts/src/utils/utils.ts similarity index 100% rename from src/utils/utils.ts rename to packages/discord-html-transcripts/src/utils/utils.ts diff --git a/tests/README.md b/packages/discord-html-transcripts/tests/README.md similarity index 100% rename from tests/README.md rename to packages/discord-html-transcripts/tests/README.md diff --git a/tests/generate.ts b/packages/discord-html-transcripts/tests/generate.ts similarity index 100% rename from tests/generate.ts rename to packages/discord-html-transcripts/tests/generate.ts From a3923346f2b848e43ef03e712cfb1e1fb1e7ec94 Mon Sep 17 00:00:00 2001 From: Derock Date: Thu, 10 Aug 2023 20:57:47 -0700 Subject: [PATCH 2/4] wip: pnpm-workspace --- package.json | 16 ++++++++++++++++ pnpm-workspace.yaml | 3 +++ 2 files changed, 19 insertions(+) create mode 100644 package.json create mode 100644 pnpm-workspace.yaml diff --git a/package.json b/package.json new file mode 100644 index 0000000..9b4fb9e --- /dev/null +++ b/package.json @@ -0,0 +1,16 @@ +{ + "name": "discord-html-transcripts", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "Apache-2.0", + "workspaces": [ + "./packages/**", + "./apps/**" + ] +} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..4e708bd --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +packages: + - 'packages/*' + - 'apps/*' From 5eeaf78020ff2f15c06c272403e93fa747f49197 Mon Sep 17 00:00:00 2001 From: Derock Date: Thu, 10 Aug 2023 21:01:21 -0700 Subject: [PATCH 3/4] add discord-markdown-parser --- .../.github/workflows/CI.yml | 25 + .../.github/workflows/auto-updater.yml | 46 + packages/discord-markdown-parser/.gitignore | 178 ++ .../discord-markdown-parser/.prettierrc.json | 8 + .../.vscode/settings.json | 3 + packages/discord-markdown-parser/LICENSE | 201 ++ packages/discord-markdown-parser/README.md | 70 + .../discord-markdown-parser/package-lock.json | 2832 +++++++++++++++++ packages/discord-markdown-parser/package.json | 44 + .../discord-markdown-parser/pnpm-lock.yaml | 1043 ++++++ .../scripts/sha-tracker.json | 1 + .../scripts/twemoji-regex-updater.mjs | 67 + packages/discord-markdown-parser/src/index.ts | 72 + .../src/rules/autolink.ts | 19 + .../src/rules/blockQuote.ts | 24 + .../discord-markdown-parser/src/rules/br.ts | 9 + .../src/rules/codeBlock.ts | 18 + .../src/rules/discord/channel.ts | 12 + .../src/rules/discord/emoji.ts | 14 + .../src/rules/discord/everyone.ts | 10 + .../src/rules/discord/here.ts | 10 + .../src/rules/discord/role.ts | 12 + .../src/rules/discord/time.ts | 13 + .../src/rules/discord/twemoji.ts | 12 + .../src/rules/discord/user.ts | 13 + .../discord-markdown-parser/src/rules/em.ts | 17 + .../src/rules/emoticon.ts | 13 + .../src/rules/inlineCode.ts | 9 + .../src/rules/spoiler.ts | 12 + .../src/rules/strike.ts | 10 + .../discord-markdown-parser/src/rules/text.ts | 10 + .../discord-markdown-parser/src/rules/url.ts | 19 + .../discord-markdown-parser/src/tsconfig.json | 4 + .../src/utils/extend.ts | 5 + .../src/utils/regex.ts | 25 + .../src/utils/twemojiRegex.ts | 6 + .../tests/parse.test.ts | 328 ++ .../tests/tsconfig.json | 6 + .../discord-markdown-parser/tsconfig.json | 104 + .../discord-markdown-parser/vitest.config.ts | 12 + 40 files changed, 5336 insertions(+) create mode 100644 packages/discord-markdown-parser/.github/workflows/CI.yml create mode 100644 packages/discord-markdown-parser/.github/workflows/auto-updater.yml create mode 100644 packages/discord-markdown-parser/.gitignore create mode 100644 packages/discord-markdown-parser/.prettierrc.json create mode 100644 packages/discord-markdown-parser/.vscode/settings.json create mode 100644 packages/discord-markdown-parser/LICENSE create mode 100644 packages/discord-markdown-parser/README.md create mode 100644 packages/discord-markdown-parser/package-lock.json create mode 100644 packages/discord-markdown-parser/package.json create mode 100644 packages/discord-markdown-parser/pnpm-lock.yaml create mode 100644 packages/discord-markdown-parser/scripts/sha-tracker.json create mode 100644 packages/discord-markdown-parser/scripts/twemoji-regex-updater.mjs create mode 100644 packages/discord-markdown-parser/src/index.ts create mode 100644 packages/discord-markdown-parser/src/rules/autolink.ts create mode 100644 packages/discord-markdown-parser/src/rules/blockQuote.ts create mode 100644 packages/discord-markdown-parser/src/rules/br.ts create mode 100644 packages/discord-markdown-parser/src/rules/codeBlock.ts create mode 100644 packages/discord-markdown-parser/src/rules/discord/channel.ts create mode 100644 packages/discord-markdown-parser/src/rules/discord/emoji.ts create mode 100644 packages/discord-markdown-parser/src/rules/discord/everyone.ts create mode 100644 packages/discord-markdown-parser/src/rules/discord/here.ts create mode 100644 packages/discord-markdown-parser/src/rules/discord/role.ts create mode 100644 packages/discord-markdown-parser/src/rules/discord/time.ts create mode 100644 packages/discord-markdown-parser/src/rules/discord/twemoji.ts create mode 100644 packages/discord-markdown-parser/src/rules/discord/user.ts create mode 100644 packages/discord-markdown-parser/src/rules/em.ts create mode 100644 packages/discord-markdown-parser/src/rules/emoticon.ts create mode 100644 packages/discord-markdown-parser/src/rules/inlineCode.ts create mode 100644 packages/discord-markdown-parser/src/rules/spoiler.ts create mode 100644 packages/discord-markdown-parser/src/rules/strike.ts create mode 100644 packages/discord-markdown-parser/src/rules/text.ts create mode 100644 packages/discord-markdown-parser/src/rules/url.ts create mode 100644 packages/discord-markdown-parser/src/tsconfig.json create mode 100644 packages/discord-markdown-parser/src/utils/extend.ts create mode 100644 packages/discord-markdown-parser/src/utils/regex.ts create mode 100644 packages/discord-markdown-parser/src/utils/twemojiRegex.ts create mode 100644 packages/discord-markdown-parser/tests/parse.test.ts create mode 100644 packages/discord-markdown-parser/tests/tsconfig.json create mode 100644 packages/discord-markdown-parser/tsconfig.json create mode 100644 packages/discord-markdown-parser/vitest.config.ts diff --git a/packages/discord-markdown-parser/.github/workflows/CI.yml b/packages/discord-markdown-parser/.github/workflows/CI.yml new file mode 100644 index 0000000..c4e41b9 --- /dev/null +++ b/packages/discord-markdown-parser/.github/workflows/CI.yml @@ -0,0 +1,25 @@ +name: Continuous Integration + +on: + push: + branches: + - main + pull_request: + +jobs: + Tests: + name: Tests + runs-on: ubuntu-latest + steps: + - name: Checkout Project + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - name: Use Node.js v16 + uses: actions/setup-node@2fddd8803e2f5c9604345a0b591c3020ee971a93 # tag=v3 + with: + node-version: 16 + + - name: Install Dependencies + run: npm install + + - name: Run Tests + run: npm test diff --git a/packages/discord-markdown-parser/.github/workflows/auto-updater.yml b/packages/discord-markdown-parser/.github/workflows/auto-updater.yml new file mode 100644 index 0000000..f308d19 --- /dev/null +++ b/packages/discord-markdown-parser/.github/workflows/auto-updater.yml @@ -0,0 +1,46 @@ +name: Automatic Data Update + +on: + workflow_dispatch: + schedule: + - cron: '0 2 * * *' + +jobs: + DataUpdater: + name: Automatic Data Update + runs-on: ubuntu-latest + if: github.repository_owner == 'ItzDerock' + steps: + - name: Checkout Project + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - name: Use Node.js v18 + uses: actions/setup-node@2fddd8803e2f5c9604345a0b591c3020ee971a93 # tag=v3 + with: + node-version: 18 + cache: npm + cache-dependency-path: './package-lock.json' + - name: Install Dependencies + run: npm install + - name: Run updater + run: node --experimental-json-modules scripts/twemoji-regex-updater.mjs + - name: Run prettier on the code + run: npm run format + - name: Commit any changes and create a pull request + env: + GITHUB_USER: github-actions[bot] + GITHUB_EMAIL: 41898282+github-actions[bot]@users.noreply.github.com + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git add .; + if git diff-index --quiet HEAD --; then + echo "No changes to commit, exiting with code 0" + exit 0; + else + git remote set-url origin "https://${GITHUB_TOKEN}:x-oauth-basic@github.com/${GITHUB_REPOSITORY}.git"; + git config --local user.email "${GITHUB_EMAIL}"; + git config --local user.name "${GITHUB_USER}"; + git checkout -b update-twemoji-regex/$(date +%F-%H-%M); + git commit -sam "feat: update Twemoji Regex"; + git push --set-upstream origin $(git rev-parse --abbrev-ref HEAD) + gh pr create -t "feat: update twemoji regex" -b "*bleep bloop* I updated the Twemoji Regex" -B main; + fi diff --git a/packages/discord-markdown-parser/.gitignore b/packages/discord-markdown-parser/.gitignore new file mode 100644 index 0000000..80ae2f1 --- /dev/null +++ b/packages/discord-markdown-parser/.gitignore @@ -0,0 +1,178 @@ +build/ + +# Created by https://www.toptal.com/developers/gitignore/api/node,macos +# Edit at https://www.toptal.com/developers/gitignore?templates=node,macos + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +### Node Patch ### +# Serverless Webpack directories +.webpack/ + +# Optional stylelint cache + +# SvelteKit build / generate output +.svelte-kit + +# End of https://www.toptal.com/developers/gitignore/api/node,macos diff --git a/packages/discord-markdown-parser/.prettierrc.json b/packages/discord-markdown-parser/.prettierrc.json new file mode 100644 index 0000000..ff118b6 --- /dev/null +++ b/packages/discord-markdown-parser/.prettierrc.json @@ -0,0 +1,8 @@ +{ + "printWidth": 120, + "useTabs": false, + "quoteProps": "as-needed", + "trailingComma": "es5", + "endOfLine": "lf", + "singleQuote": true +} diff --git a/packages/discord-markdown-parser/.vscode/settings.json b/packages/discord-markdown-parser/.vscode/settings.json new file mode 100644 index 0000000..0a77011 --- /dev/null +++ b/packages/discord-markdown-parser/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.tabSize": 2 +} \ No newline at end of file diff --git a/packages/discord-markdown-parser/LICENSE b/packages/discord-markdown-parser/LICENSE new file mode 100644 index 0000000..f49a4e1 --- /dev/null +++ b/packages/discord-markdown-parser/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/packages/discord-markdown-parser/README.md b/packages/discord-markdown-parser/README.md new file mode 100644 index 0000000..91fd483 --- /dev/null +++ b/packages/discord-markdown-parser/README.md @@ -0,0 +1,70 @@ +# `discord-markdown-parser` + +[![Discord](https://img.shields.io/discord/555474311637499955?label=discord)](https://discord.gg/rf5qN7C) +[![npm](https://img.shields.io/npm/dw/discord-markdown-parser)](http://npmjs.org/package/discord-markdown-parser) +![GitHub package.json version](https://img.shields.io/github/package-json/v/ItzDerock/discord-markdown-parser) +![GitHub Repo stars](https://img.shields.io/github/stars/ItzDerock/discord-markdown-parser?style=social) + +A node.js markdown implementation based on the [simple-markdown](https://github.com/Khan/simple-markdown) library, which is the same technology [discord use](https://discord.com/blog/how-discord-renders-rich-messages-on-the-android-app). + +Designed to be used for [discord-html-transcripts](https://github.com/ItzDerock/discord-html-transcripts) + +`discord-markdown-parser` will parse any given string into an [AST tree](https://en.wikipedia.org/wiki/Abstract_syntax_tree) and supports: + +- links +- block quotes +- inline quotes +- code blocks +- inline code +- italics (em) +- spoilers +- timestamps +- bold +- strikethrough +- underline +- channel mentions +- user mentions +- role mentions +- @everyone +- @here +- emojis +- & more + +## Usage + +```js +import { parse } from 'discord-markdown-parser'; +// or const { parse } = require('discord-markdown-parser'); + +// input is a string +const input = 'test **markdown** with `cool` *stuff*'; + +// specify what type of markdown this is +// this can be 'normal' or 'extended' (default = normal) +// extended should be used if the input is from a webhook message or embed description. +const type = 'normal'; + +// will return an AST tree +const parsed = parse(input, type); +``` + +## Extending + +```js +// you can import the default rules using +import { rules } from 'discord-markdown-parser'; + +// and you can add your own rules +const newRules = { + ...rules, + customRule: { + ... + } // see simple-markdown documentation for details +}; + +// import simpleMarkdown +import SimpleMarkdown from 'simple-markdown'; + +// and create the parser +const parser = SimpleMarkdown.parserFor(newRules); +``` diff --git a/packages/discord-markdown-parser/package-lock.json b/packages/discord-markdown-parser/package-lock.json new file mode 100644 index 0000000..eaec7fe --- /dev/null +++ b/packages/discord-markdown-parser/package-lock.json @@ -0,0 +1,2832 @@ +{ + "name": "discord-markdown-parser", + "version": "1.1.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "discord-markdown-parser", + "version": "1.1.0", + "license": "GNU GPLv3", + "dependencies": { + "simple-markdown": "^0.7.3" + }, + "devDependencies": { + "@types/node": "^18.7.13", + "@vitest/coverage-c8": "^0.23.4", + "colorette": "^2.0.19", + "prettier": "^2.7.1", + "ts-node": "^10.9.1", + "typescript": "^4.8.2", + "vitest": "^0.23.4" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.9.tgz", + "integrity": "sha512-VZPy/ETF3fBG5PiinIkA0W/tlsvlEgJccyN2DzWZEl0DlVKRbu91PvY2D6Lxgluj4w9QtYHjOWjAT44C+oQ+EQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.9.tgz", + "integrity": "sha512-O+NfmkfRrb3uSsTa4jE3WApidSe3N5++fyOVGP1SmMZi4A3BZELkhUUvj5hwmMuNdlpzAZ8iAPz2vmcR7DCFQA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, + "node_modules/@types/chai": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", + "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==", + "dev": true + }, + "node_modules/@types/chai-subset": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", + "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", + "dev": true, + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.7.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", + "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "node_modules/@types/react": { + "version": "18.0.21", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.21.tgz", + "integrity": "sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "node_modules/@vitest/coverage-c8": { + "version": "0.23.4", + "resolved": "https://registry.npmjs.org/@vitest/coverage-c8/-/coverage-c8-0.23.4.tgz", + "integrity": "sha512-jmD00a5DQH9gu9K+YdvVhcMuv2CzHvU4gCnySS40Ec5hKlXtlCzRfNHl00VnhfuBeaQUmaQYe60BLT413HyDdg==", + "dev": true, + "dependencies": { + "c8": "^7.12.0", + "vitest": "0.23.4" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/c8": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz", + "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + }, + "bin": { + "c8": "bin/c8.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.9.tgz", + "integrity": "sha512-OnYr1rkMVxtmMHIAKZLMcEUlJmqcbxBz9QoBU8G9v455na0fuzlT/GLu6l+SRghrk0Mm2fSSciMmzV43Q8e0Gg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.15.9", + "@esbuild/linux-loong64": "0.15.9", + "esbuild-android-64": "0.15.9", + "esbuild-android-arm64": "0.15.9", + "esbuild-darwin-64": "0.15.9", + "esbuild-darwin-arm64": "0.15.9", + "esbuild-freebsd-64": "0.15.9", + "esbuild-freebsd-arm64": "0.15.9", + "esbuild-linux-32": "0.15.9", + "esbuild-linux-64": "0.15.9", + "esbuild-linux-arm": "0.15.9", + "esbuild-linux-arm64": "0.15.9", + "esbuild-linux-mips64le": "0.15.9", + "esbuild-linux-ppc64le": "0.15.9", + "esbuild-linux-riscv64": "0.15.9", + "esbuild-linux-s390x": "0.15.9", + "esbuild-netbsd-64": "0.15.9", + "esbuild-openbsd-64": "0.15.9", + "esbuild-sunos-64": "0.15.9", + "esbuild-windows-32": "0.15.9", + "esbuild-windows-64": "0.15.9", + "esbuild-windows-arm64": "0.15.9" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.9.tgz", + "integrity": "sha512-HQCX7FJn9T4kxZQkhPjNZC7tBWZqJvhlLHPU2SFzrQB/7nDXjmTIFpFTjt7Bd1uFpeXmuwf5h5fZm+x/hLnhbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.9.tgz", + "integrity": "sha512-E6zbLfqbFVCNEKircSHnPiSTsm3fCRxeIMPfrkS33tFjIAoXtwegQfVZqMGR0FlsvVxp2NEDOUz+WW48COCjSg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.9.tgz", + "integrity": "sha512-gI7dClcDN/HHVacZhTmGjl0/TWZcGuKJ0I7/xDGJwRQQn7aafZGtvagOFNmuOq+OBFPhlPv1T6JElOXb0unkSQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.9.tgz", + "integrity": "sha512-VZIMlcRN29yg/sv7DsDwN+OeufCcoTNaTl3Vnav7dL/nvsApD7uvhVRbgyMzv0zU/PP0xRhhIpTyc7lxEzHGSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.9.tgz", + "integrity": "sha512-uM4z5bTvuAXqPxrI204txhlsPIolQPWRMLenvGuCPZTnnGlCMF2QLs0Plcm26gcskhxewYo9LkkmYSS5Czrb5A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.9.tgz", + "integrity": "sha512-HHDjT3O5gWzicGdgJ5yokZVN9K9KG05SnERwl9nBYZaCjcCgj/sX8Ps1jvoFSfNCO04JSsHSOWo4qvxFuj8FoA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.9.tgz", + "integrity": "sha512-AQIdE8FugGt1DkcekKi5ycI46QZpGJ/wqcMr7w6YUmOmp2ohQ8eO4sKUsOxNOvYL7hGEVwkndSyszR6HpVHLFg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.9.tgz", + "integrity": "sha512-4RXjae7g6Qs7StZyiYyXTZXBlfODhb1aBVAjd+ANuPmMhWthQilWo7rFHwJwL7DQu1Fjej2sODAVwLbcIVsAYQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.9.tgz", + "integrity": "sha512-3Zf2GVGUOI7XwChH3qrnTOSqfV1V4CAc/7zLVm4lO6JT6wbJrTgEYCCiNSzziSju+J9Jhf9YGWk/26quWPC6yQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.9.tgz", + "integrity": "sha512-a+bTtxJmYmk9d+s2W4/R1SYKDDAldOKmWjWP0BnrWtDbvUBNOm++du0ysPju4mZVoEFgS1yLNW+VXnG/4FNwdQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.9.tgz", + "integrity": "sha512-Zn9HSylDp89y+TRREMDoGrc3Z4Hs5u56ozZLQCiZAUx2+HdbbXbWdjmw3FdTJ/i7t5Cew6/Q+6kfO3KCcFGlyw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.9.tgz", + "integrity": "sha512-OEiOxNAMH9ENFYqRsWUj3CWyN3V8P3ZXyfNAtX5rlCEC/ERXrCEFCJji/1F6POzsXAzxvUJrTSTCy7G6BhA6Fw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.9.tgz", + "integrity": "sha512-ukm4KsC3QRausEFjzTsOZ/qqazw0YvJsKmfoZZm9QW27OHjk2XKSQGGvx8gIEswft/Sadp03/VZvAaqv5AIwNA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.9.tgz", + "integrity": "sha512-uDOQEH55wQ6ahcIKzQr3VyjGc6Po/xblLGLoUk3fVL1qjlZAibtQr6XRfy5wPJLu/M2o0vQKLq4lyJ2r1tWKcw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.9.tgz", + "integrity": "sha512-yWgxaYTQz+TqX80wXRq6xAtb7GSBAp6gqLKfOdANg9qEmAI1Bxn04IrQr0Mzm4AhxvGKoHzjHjMgXbCCSSDxcw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.9.tgz", + "integrity": "sha512-JmS18acQl4iSAjrEha1MfEmUMN4FcnnrtTaJ7Qg0tDCOcgpPPQRLGsZqhes0vmx8VA6IqRyScqXvaL7+Q0Uf3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.9.tgz", + "integrity": "sha512-UKynGSWpzkPmXW3D2UMOD9BZPIuRaSqphxSCwScfEE05Be3KAmvjsBhht1fLzKpiFVJb0BYMd4jEbWMyJ/z1hQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.9.tgz", + "integrity": "sha512-aqXvu4/W9XyTVqO/hw3rNxKE1TcZiEYHPsXM9LwYmKSX9/hjvfIJzXwQBlPcJ/QOxedfoMVH0YnhhQ9Ffb0RGA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.9.tgz", + "integrity": "sha512-zm7h91WUmlS4idMtjvCrEeNhlH7+TNOmqw5dJPJZrgFaxoFyqYG6CKDpdFCQXdyKpD5yvzaQBOMVTCBVKGZDEg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.9.tgz", + "integrity": "sha512-yQEVIv27oauAtvtuhJVfSNMztJJX47ismRS6Sv2QMVV9RM+6xjbMWuuwM2nxr5A2/gj/mu2z9YlQxiwoFRCfZA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/local-pkg": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz", + "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/postcss": { + "version": "8.4.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", + "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.78.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz", + "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/simple-markdown": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/simple-markdown/-/simple-markdown-0.7.3.tgz", + "integrity": "sha512-uGXIc13NGpqfPeFJIt/7SHHxd6HekEJYtsdoCM06mEBPL9fQH/pSD7LRM6PZ7CKchpSvxKL4tvwMamqAaNDAyg==", + "dependencies": { + "@types/react": ">=16.0.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-literal": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-0.4.2.tgz", + "integrity": "sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tinybench": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.1.5.tgz", + "integrity": "sha512-ak+PZZEuH3mw6CCFOgf5S90YH0MARnZNhxjhjguAmoJimEMAJuNip/rJRd6/wyylHItomVpKTzZk9zrhTrQCoQ==", + "dev": true + }, + "node_modules/tinypool": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.3.0.tgz", + "integrity": "sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.0.2.tgz", + "integrity": "sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/typescript": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", + "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", + "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/vite": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.1.3.tgz", + "integrity": "sha512-/3XWiktaopByM5bd8dqvHxRt5EEgRikevnnrpND0gRfNkrMrPaGGexhtLCzv15RcCMtV2CLw+BPas8YFeSG0KA==", + "dev": true, + "dependencies": { + "esbuild": "^0.15.6", + "postcss": "^8.4.16", + "resolve": "^1.22.1", + "rollup": "~2.78.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "less": "*", + "sass": "*", + "stylus": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "0.23.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.23.4.tgz", + "integrity": "sha512-iukBNWqQAv8EKDBUNntspLp9SfpaVFbmzmM0sNcnTxASQZMzRw3PsM6DMlsHiI+I6GeO5/sYDg3ecpC+SNFLrQ==", + "dev": true, + "dependencies": { + "@types/chai": "^4.3.3", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "chai": "^4.3.6", + "debug": "^4.3.4", + "local-pkg": "^0.4.2", + "strip-literal": "^0.4.1", + "tinybench": "^2.1.5", + "tinypool": "^0.3.0", + "tinyspy": "^1.0.2", + "vite": "^2.9.12 || ^3.0.0-0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.16.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/browser": "*", + "@vitest/ui": "*", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@esbuild/android-arm": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.9.tgz", + "integrity": "sha512-VZPy/ETF3fBG5PiinIkA0W/tlsvlEgJccyN2DzWZEl0DlVKRbu91PvY2D6Lxgluj4w9QtYHjOWjAT44C+oQ+EQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.9.tgz", + "integrity": "sha512-O+NfmkfRrb3uSsTa4jE3WApidSe3N5++fyOVGP1SmMZi4A3BZELkhUUvj5hwmMuNdlpzAZ8iAPz2vmcR7DCFQA==", + "dev": true, + "optional": true + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, + "@types/chai": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", + "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==", + "dev": true + }, + "@types/chai-subset": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", + "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", + "dev": true, + "requires": { + "@types/chai": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "@types/node": { + "version": "18.7.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", + "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "@types/react": { + "version": "18.0.21", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.21.tgz", + "integrity": "sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "@vitest/coverage-c8": { + "version": "0.23.4", + "resolved": "https://registry.npmjs.org/@vitest/coverage-c8/-/coverage-c8-0.23.4.tgz", + "integrity": "sha512-jmD00a5DQH9gu9K+YdvVhcMuv2CzHvU4gCnySS40Ec5hKlXtlCzRfNHl00VnhfuBeaQUmaQYe60BLT413HyDdg==", + "dev": true, + "requires": { + "c8": "^7.12.0", + "vitest": "0.23.4" + } + }, + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "c8": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz", + "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + } + }, + "chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "esbuild": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.9.tgz", + "integrity": "sha512-OnYr1rkMVxtmMHIAKZLMcEUlJmqcbxBz9QoBU8G9v455na0fuzlT/GLu6l+SRghrk0Mm2fSSciMmzV43Q8e0Gg==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.15.9", + "@esbuild/linux-loong64": "0.15.9", + "esbuild-android-64": "0.15.9", + "esbuild-android-arm64": "0.15.9", + "esbuild-darwin-64": "0.15.9", + "esbuild-darwin-arm64": "0.15.9", + "esbuild-freebsd-64": "0.15.9", + "esbuild-freebsd-arm64": "0.15.9", + "esbuild-linux-32": "0.15.9", + "esbuild-linux-64": "0.15.9", + "esbuild-linux-arm": "0.15.9", + "esbuild-linux-arm64": "0.15.9", + "esbuild-linux-mips64le": "0.15.9", + "esbuild-linux-ppc64le": "0.15.9", + "esbuild-linux-riscv64": "0.15.9", + "esbuild-linux-s390x": "0.15.9", + "esbuild-netbsd-64": "0.15.9", + "esbuild-openbsd-64": "0.15.9", + "esbuild-sunos-64": "0.15.9", + "esbuild-windows-32": "0.15.9", + "esbuild-windows-64": "0.15.9", + "esbuild-windows-arm64": "0.15.9" + } + }, + "esbuild-android-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.9.tgz", + "integrity": "sha512-HQCX7FJn9T4kxZQkhPjNZC7tBWZqJvhlLHPU2SFzrQB/7nDXjmTIFpFTjt7Bd1uFpeXmuwf5h5fZm+x/hLnhbw==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.9.tgz", + "integrity": "sha512-E6zbLfqbFVCNEKircSHnPiSTsm3fCRxeIMPfrkS33tFjIAoXtwegQfVZqMGR0FlsvVxp2NEDOUz+WW48COCjSg==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.9.tgz", + "integrity": "sha512-gI7dClcDN/HHVacZhTmGjl0/TWZcGuKJ0I7/xDGJwRQQn7aafZGtvagOFNmuOq+OBFPhlPv1T6JElOXb0unkSQ==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.9.tgz", + "integrity": "sha512-VZIMlcRN29yg/sv7DsDwN+OeufCcoTNaTl3Vnav7dL/nvsApD7uvhVRbgyMzv0zU/PP0xRhhIpTyc7lxEzHGSw==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.9.tgz", + "integrity": "sha512-uM4z5bTvuAXqPxrI204txhlsPIolQPWRMLenvGuCPZTnnGlCMF2QLs0Plcm26gcskhxewYo9LkkmYSS5Czrb5A==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.9.tgz", + "integrity": "sha512-HHDjT3O5gWzicGdgJ5yokZVN9K9KG05SnERwl9nBYZaCjcCgj/sX8Ps1jvoFSfNCO04JSsHSOWo4qvxFuj8FoA==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.9.tgz", + "integrity": "sha512-AQIdE8FugGt1DkcekKi5ycI46QZpGJ/wqcMr7w6YUmOmp2ohQ8eO4sKUsOxNOvYL7hGEVwkndSyszR6HpVHLFg==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.9.tgz", + "integrity": "sha512-4RXjae7g6Qs7StZyiYyXTZXBlfODhb1aBVAjd+ANuPmMhWthQilWo7rFHwJwL7DQu1Fjej2sODAVwLbcIVsAYQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.9.tgz", + "integrity": "sha512-3Zf2GVGUOI7XwChH3qrnTOSqfV1V4CAc/7zLVm4lO6JT6wbJrTgEYCCiNSzziSju+J9Jhf9YGWk/26quWPC6yQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.9.tgz", + "integrity": "sha512-a+bTtxJmYmk9d+s2W4/R1SYKDDAldOKmWjWP0BnrWtDbvUBNOm++du0ysPju4mZVoEFgS1yLNW+VXnG/4FNwdQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.9.tgz", + "integrity": "sha512-Zn9HSylDp89y+TRREMDoGrc3Z4Hs5u56ozZLQCiZAUx2+HdbbXbWdjmw3FdTJ/i7t5Cew6/Q+6kfO3KCcFGlyw==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.9.tgz", + "integrity": "sha512-OEiOxNAMH9ENFYqRsWUj3CWyN3V8P3ZXyfNAtX5rlCEC/ERXrCEFCJji/1F6POzsXAzxvUJrTSTCy7G6BhA6Fw==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.9.tgz", + "integrity": "sha512-ukm4KsC3QRausEFjzTsOZ/qqazw0YvJsKmfoZZm9QW27OHjk2XKSQGGvx8gIEswft/Sadp03/VZvAaqv5AIwNA==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.9.tgz", + "integrity": "sha512-uDOQEH55wQ6ahcIKzQr3VyjGc6Po/xblLGLoUk3fVL1qjlZAibtQr6XRfy5wPJLu/M2o0vQKLq4lyJ2r1tWKcw==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.9.tgz", + "integrity": "sha512-yWgxaYTQz+TqX80wXRq6xAtb7GSBAp6gqLKfOdANg9qEmAI1Bxn04IrQr0Mzm4AhxvGKoHzjHjMgXbCCSSDxcw==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.9.tgz", + "integrity": "sha512-JmS18acQl4iSAjrEha1MfEmUMN4FcnnrtTaJ7Qg0tDCOcgpPPQRLGsZqhes0vmx8VA6IqRyScqXvaL7+Q0Uf3A==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.9.tgz", + "integrity": "sha512-UKynGSWpzkPmXW3D2UMOD9BZPIuRaSqphxSCwScfEE05Be3KAmvjsBhht1fLzKpiFVJb0BYMd4jEbWMyJ/z1hQ==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.9.tgz", + "integrity": "sha512-aqXvu4/W9XyTVqO/hw3rNxKE1TcZiEYHPsXM9LwYmKSX9/hjvfIJzXwQBlPcJ/QOxedfoMVH0YnhhQ9Ffb0RGA==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.9.tgz", + "integrity": "sha512-zm7h91WUmlS4idMtjvCrEeNhlH7+TNOmqw5dJPJZrgFaxoFyqYG6CKDpdFCQXdyKpD5yvzaQBOMVTCBVKGZDEg==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.9.tgz", + "integrity": "sha512-yQEVIv27oauAtvtuhJVfSNMztJJX47ismRS6Sv2QMVV9RM+6xjbMWuuwM2nxr5A2/gj/mu2z9YlQxiwoFRCfZA==", + "dev": true, + "optional": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "local-pkg": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz", + "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "dev": true, + "requires": { + "get-func-name": "^2.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "postcss": { + "version": "8.4.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", + "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "2.78.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz", + "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "simple-markdown": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/simple-markdown/-/simple-markdown-0.7.3.tgz", + "integrity": "sha512-uGXIc13NGpqfPeFJIt/7SHHxd6HekEJYtsdoCM06mEBPL9fQH/pSD7LRM6PZ7CKchpSvxKL4tvwMamqAaNDAyg==", + "requires": { + "@types/react": ">=16.0.0" + } + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-literal": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-0.4.2.tgz", + "integrity": "sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==", + "dev": true, + "requires": { + "acorn": "^8.8.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "tinybench": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.1.5.tgz", + "integrity": "sha512-ak+PZZEuH3mw6CCFOgf5S90YH0MARnZNhxjhjguAmoJimEMAJuNip/rJRd6/wyylHItomVpKTzZk9zrhTrQCoQ==", + "dev": true + }, + "tinypool": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.3.0.tgz", + "integrity": "sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ==", + "dev": true + }, + "tinyspy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.0.2.tgz", + "integrity": "sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==", + "dev": true + }, + "ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "typescript": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", + "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", + "dev": true + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", + "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, + "vite": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.1.3.tgz", + "integrity": "sha512-/3XWiktaopByM5bd8dqvHxRt5EEgRikevnnrpND0gRfNkrMrPaGGexhtLCzv15RcCMtV2CLw+BPas8YFeSG0KA==", + "dev": true, + "requires": { + "esbuild": "^0.15.6", + "fsevents": "~2.3.2", + "postcss": "^8.4.16", + "resolve": "^1.22.1", + "rollup": "~2.78.0" + } + }, + "vitest": { + "version": "0.23.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.23.4.tgz", + "integrity": "sha512-iukBNWqQAv8EKDBUNntspLp9SfpaVFbmzmM0sNcnTxASQZMzRw3PsM6DMlsHiI+I6GeO5/sYDg3ecpC+SNFLrQ==", + "dev": true, + "requires": { + "@types/chai": "^4.3.3", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "chai": "^4.3.6", + "debug": "^4.3.4", + "local-pkg": "^0.4.2", + "strip-literal": "^0.4.1", + "tinybench": "^2.1.5", + "tinypool": "^0.3.0", + "tinyspy": "^1.0.2", + "vite": "^2.9.12 || ^3.0.0-0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/packages/discord-markdown-parser/package.json b/packages/discord-markdown-parser/package.json new file mode 100644 index 0000000..a065e22 --- /dev/null +++ b/packages/discord-markdown-parser/package.json @@ -0,0 +1,44 @@ +{ + "name": "discord-markdown-parser", + "version": "1.1.0", + "description": "Parse discord-style markdown into an abstract syntax tree.", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "homepage": "https://github.com/ItzDerock/discord-markdown-parser", + "repository": { + "type": "git", + "url": "git+https://github.com/ItzDerock/discord-markdown-parser" + }, + "scripts": { + "build": "tsc -b src", + "format": "prettier --write --cache \"{src,scripts}/**/*.{mjs,ts,js}\"", + "test": "vitest run", + "release": "npm run build && npm pack" + }, + "keywords": [ + "discord", + "markdown", + "parser", + "discord-markdown-parser", + "discord-markdown", + "simple-markdown", + "discord-parser" + ], + "author": "Derock ", + "license": "GNU GPLv3", + "devDependencies": { + "@types/node": "^18.7.13", + "@vitest/coverage-c8": "^0.23.4", + "colorette": "^2.0.19", + "prettier": "^2.7.1", + "ts-node": "^10.9.1", + "typescript": "^4.8.2", + "vitest": "^0.23.4" + }, + "dependencies": { + "simple-markdown": "^0.7.3" + }, + "files": [ + "dist" + ] +} diff --git a/packages/discord-markdown-parser/pnpm-lock.yaml b/packages/discord-markdown-parser/pnpm-lock.yaml new file mode 100644 index 0000000..7e1274a --- /dev/null +++ b/packages/discord-markdown-parser/pnpm-lock.yaml @@ -0,0 +1,1043 @@ +lockfileVersion: 5.4 + +specifiers: + '@types/node': ^18.7.13 + '@vitest/coverage-c8': ^0.23.4 + colorette: ^2.0.19 + prettier: ^2.7.1 + simple-markdown: ^0.7.3 + ts-node: ^10.9.1 + typescript: ^4.8.2 + vitest: ^0.23.4 + +dependencies: + simple-markdown: 0.7.3 + +devDependencies: + '@types/node': 18.7.13 + '@vitest/coverage-c8': 0.23.4 + colorette: 2.0.19 + prettier: 2.7.1 + ts-node: 10.9.1_hwinnrf7y5nyyzygpj45jmvjia + typescript: 4.8.2 + vitest: 0.23.4 + +packages: + + /@bcoe/v8-coverage/0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: true + + /@cspotcode/source-map-support/0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + + /@esbuild/android-arm/0.15.9: + resolution: {integrity: sha512-VZPy/ETF3fBG5PiinIkA0W/tlsvlEgJccyN2DzWZEl0DlVKRbu91PvY2D6Lxgluj4w9QtYHjOWjAT44C+oQ+EQ==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.9: + resolution: {integrity: sha512-O+NfmkfRrb3uSsTa4jE3WApidSe3N5++fyOVGP1SmMZi4A3BZELkhUUvj5hwmMuNdlpzAZ8iAPz2vmcR7DCFQA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@istanbuljs/schema/0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: true + + /@jridgewell/resolve-uri/3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec/1.4.14: + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + dev: true + + /@jridgewell/trace-mapping/0.3.15: + resolution: {integrity: sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@jridgewell/trace-mapping/0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@tsconfig/node10/1.0.9: + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + dev: true + + /@tsconfig/node12/1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14/1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16/1.0.3: + resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} + dev: true + + /@types/chai-subset/1.3.3: + resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} + dependencies: + '@types/chai': 4.3.3 + dev: true + + /@types/chai/4.3.3: + resolution: {integrity: sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==} + dev: true + + /@types/istanbul-lib-coverage/2.0.4: + resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + dev: true + + /@types/node/18.7.13: + resolution: {integrity: sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==} + dev: true + + /@types/prop-types/15.7.5: + resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + dev: false + + /@types/react/18.0.17: + resolution: {integrity: sha512-38ETy4tL+rn4uQQi7mB81G7V1g0u2ryquNmsVIOKUAEIDK+3CUjZ6rSRpdvS99dNBnkLFL83qfmtLacGOTIhwQ==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.2 + csstype: 3.1.0 + dev: false + + /@types/scheduler/0.16.2: + resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} + dev: false + + /@vitest/coverage-c8/0.23.4: + resolution: {integrity: sha512-jmD00a5DQH9gu9K+YdvVhcMuv2CzHvU4gCnySS40Ec5hKlXtlCzRfNHl00VnhfuBeaQUmaQYe60BLT413HyDdg==} + dependencies: + c8: 7.12.0 + vitest: 0.23.4 + transitivePeerDependencies: + - '@edge-runtime/vm' + - '@vitest/browser' + - '@vitest/ui' + - happy-dom + - jsdom + - less + - sass + - stylus + - supports-color + - terser + dev: true + + /acorn-walk/8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn/8.8.0: + resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /ansi-regex/5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-styles/4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /arg/4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + + /assertion-error/1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /c8/7.12.0: + resolution: {integrity: sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==} + engines: {node: '>=10.12.0'} + hasBin: true + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@istanbuljs/schema': 0.1.3 + find-up: 5.0.0 + foreground-child: 2.0.0 + istanbul-lib-coverage: 3.2.0 + istanbul-lib-report: 3.0.0 + istanbul-reports: 3.1.5 + rimraf: 3.0.2 + test-exclude: 6.0.0 + v8-to-istanbul: 9.0.1 + yargs: 16.2.0 + yargs-parser: 20.2.9 + dev: true + + /chai/4.3.6: + resolution: {integrity: sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.2 + deep-eql: 3.0.1 + get-func-name: 2.0.0 + loupe: 2.3.4 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + + /check-error/1.0.2: + resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} + dev: true + + /cliui/7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /colorette/2.0.19: + resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} + dev: true + + /concat-map/0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /convert-source-map/1.8.0: + resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} + dependencies: + safe-buffer: 5.1.2 + dev: true + + /create-require/1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + + /cross-spawn/7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /csstype/3.1.0: + resolution: {integrity: sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==} + dev: false + + /debug/4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /deep-eql/3.0.1: + resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} + engines: {node: '>=0.12'} + dependencies: + type-detect: 4.0.8 + dev: true + + /diff/4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + + /emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /esbuild-android-64/0.15.9: + resolution: {integrity: sha512-HQCX7FJn9T4kxZQkhPjNZC7tBWZqJvhlLHPU2SFzrQB/7nDXjmTIFpFTjt7Bd1uFpeXmuwf5h5fZm+x/hLnhbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.9: + resolution: {integrity: sha512-E6zbLfqbFVCNEKircSHnPiSTsm3fCRxeIMPfrkS33tFjIAoXtwegQfVZqMGR0FlsvVxp2NEDOUz+WW48COCjSg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.9: + resolution: {integrity: sha512-gI7dClcDN/HHVacZhTmGjl0/TWZcGuKJ0I7/xDGJwRQQn7aafZGtvagOFNmuOq+OBFPhlPv1T6JElOXb0unkSQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.9: + resolution: {integrity: sha512-VZIMlcRN29yg/sv7DsDwN+OeufCcoTNaTl3Vnav7dL/nvsApD7uvhVRbgyMzv0zU/PP0xRhhIpTyc7lxEzHGSw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.9: + resolution: {integrity: sha512-uM4z5bTvuAXqPxrI204txhlsPIolQPWRMLenvGuCPZTnnGlCMF2QLs0Plcm26gcskhxewYo9LkkmYSS5Czrb5A==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.9: + resolution: {integrity: sha512-HHDjT3O5gWzicGdgJ5yokZVN9K9KG05SnERwl9nBYZaCjcCgj/sX8Ps1jvoFSfNCO04JSsHSOWo4qvxFuj8FoA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.9: + resolution: {integrity: sha512-AQIdE8FugGt1DkcekKi5ycI46QZpGJ/wqcMr7w6YUmOmp2ohQ8eO4sKUsOxNOvYL7hGEVwkndSyszR6HpVHLFg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.9: + resolution: {integrity: sha512-4RXjae7g6Qs7StZyiYyXTZXBlfODhb1aBVAjd+ANuPmMhWthQilWo7rFHwJwL7DQu1Fjej2sODAVwLbcIVsAYQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.9: + resolution: {integrity: sha512-3Zf2GVGUOI7XwChH3qrnTOSqfV1V4CAc/7zLVm4lO6JT6wbJrTgEYCCiNSzziSju+J9Jhf9YGWk/26quWPC6yQ==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.9: + resolution: {integrity: sha512-a+bTtxJmYmk9d+s2W4/R1SYKDDAldOKmWjWP0BnrWtDbvUBNOm++du0ysPju4mZVoEFgS1yLNW+VXnG/4FNwdQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.9: + resolution: {integrity: sha512-Zn9HSylDp89y+TRREMDoGrc3Z4Hs5u56ozZLQCiZAUx2+HdbbXbWdjmw3FdTJ/i7t5Cew6/Q+6kfO3KCcFGlyw==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.9: + resolution: {integrity: sha512-OEiOxNAMH9ENFYqRsWUj3CWyN3V8P3ZXyfNAtX5rlCEC/ERXrCEFCJji/1F6POzsXAzxvUJrTSTCy7G6BhA6Fw==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.9: + resolution: {integrity: sha512-ukm4KsC3QRausEFjzTsOZ/qqazw0YvJsKmfoZZm9QW27OHjk2XKSQGGvx8gIEswft/Sadp03/VZvAaqv5AIwNA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.9: + resolution: {integrity: sha512-uDOQEH55wQ6ahcIKzQr3VyjGc6Po/xblLGLoUk3fVL1qjlZAibtQr6XRfy5wPJLu/M2o0vQKLq4lyJ2r1tWKcw==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.9: + resolution: {integrity: sha512-yWgxaYTQz+TqX80wXRq6xAtb7GSBAp6gqLKfOdANg9qEmAI1Bxn04IrQr0Mzm4AhxvGKoHzjHjMgXbCCSSDxcw==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.9: + resolution: {integrity: sha512-JmS18acQl4iSAjrEha1MfEmUMN4FcnnrtTaJ7Qg0tDCOcgpPPQRLGsZqhes0vmx8VA6IqRyScqXvaL7+Q0Uf3A==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.9: + resolution: {integrity: sha512-UKynGSWpzkPmXW3D2UMOD9BZPIuRaSqphxSCwScfEE05Be3KAmvjsBhht1fLzKpiFVJb0BYMd4jEbWMyJ/z1hQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.9: + resolution: {integrity: sha512-aqXvu4/W9XyTVqO/hw3rNxKE1TcZiEYHPsXM9LwYmKSX9/hjvfIJzXwQBlPcJ/QOxedfoMVH0YnhhQ9Ffb0RGA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.9: + resolution: {integrity: sha512-zm7h91WUmlS4idMtjvCrEeNhlH7+TNOmqw5dJPJZrgFaxoFyqYG6CKDpdFCQXdyKpD5yvzaQBOMVTCBVKGZDEg==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.9: + resolution: {integrity: sha512-yQEVIv27oauAtvtuhJVfSNMztJJX47ismRS6Sv2QMVV9RM+6xjbMWuuwM2nxr5A2/gj/mu2z9YlQxiwoFRCfZA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild/0.15.9: + resolution: {integrity: sha512-OnYr1rkMVxtmMHIAKZLMcEUlJmqcbxBz9QoBU8G9v455na0fuzlT/GLu6l+SRghrk0Mm2fSSciMmzV43Q8e0Gg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.15.9 + '@esbuild/linux-loong64': 0.15.9 + esbuild-android-64: 0.15.9 + esbuild-android-arm64: 0.15.9 + esbuild-darwin-64: 0.15.9 + esbuild-darwin-arm64: 0.15.9 + esbuild-freebsd-64: 0.15.9 + esbuild-freebsd-arm64: 0.15.9 + esbuild-linux-32: 0.15.9 + esbuild-linux-64: 0.15.9 + esbuild-linux-arm: 0.15.9 + esbuild-linux-arm64: 0.15.9 + esbuild-linux-mips64le: 0.15.9 + esbuild-linux-ppc64le: 0.15.9 + esbuild-linux-riscv64: 0.15.9 + esbuild-linux-s390x: 0.15.9 + esbuild-netbsd-64: 0.15.9 + esbuild-openbsd-64: 0.15.9 + esbuild-sunos-64: 0.15.9 + esbuild-windows-32: 0.15.9 + esbuild-windows-64: 0.15.9 + esbuild-windows-arm64: 0.15.9 + dev: true + + /escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /find-up/5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /foreground-child/2.0.0: + resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} + engines: {node: '>=8.0.0'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 3.0.7 + dev: true + + /fs.realpath/1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind/1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true + + /get-caller-file/2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /get-func-name/2.0.0: + resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} + dev: true + + /glob/7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + + /html-escaper/2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: true + + /inflight/1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /is-core-module/2.10.0: + resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} + dependencies: + has: 1.0.3 + dev: true + + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /isexe/2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /istanbul-lib-coverage/3.2.0: + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + engines: {node: '>=8'} + dev: true + + /istanbul-lib-report/3.0.0: + resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} + engines: {node: '>=8'} + dependencies: + istanbul-lib-coverage: 3.2.0 + make-dir: 3.1.0 + supports-color: 7.2.0 + dev: true + + /istanbul-reports/3.1.5: + resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.0 + dev: true + + /local-pkg/0.4.2: + resolution: {integrity: sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==} + engines: {node: '>=14'} + dev: true + + /locate-path/6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /loupe/2.3.4: + resolution: {integrity: sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==} + dependencies: + get-func-name: 2.0.0 + dev: true + + /make-dir/3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.0 + dev: true + + /make-error/1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true + + /minimatch/3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /nanoid/3.3.4: + resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /once/1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /p-limit/3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate/5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /path-exists/4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute/1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key/3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /pathval/1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + + /picocolors/1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /postcss/8.4.16: + resolution: {integrity: sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.4 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /prettier/2.7.1: + resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /require-directory/2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + + /resolve/1.22.1: + resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + hasBin: true + dependencies: + is-core-module: 2.10.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /rimraf/3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /rollup/2.78.1: + resolution: {integrity: sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /safe-buffer/5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: true + + /semver/6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + dev: true + + /shebang-command/2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex/3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /signal-exit/3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /simple-markdown/0.7.3: + resolution: {integrity: sha512-uGXIc13NGpqfPeFJIt/7SHHxd6HekEJYtsdoCM06mEBPL9fQH/pSD7LRM6PZ7CKchpSvxKL4tvwMamqAaNDAyg==} + dependencies: + '@types/react': 18.0.17 + dev: false + + /source-map-js/1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + + /string-width/4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /strip-ansi/6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-literal/0.4.2: + resolution: {integrity: sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==} + dependencies: + acorn: 8.8.0 + dev: true + + /supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /test-exclude/6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + dev: true + + /tinybench/2.1.5: + resolution: {integrity: sha512-ak+PZZEuH3mw6CCFOgf5S90YH0MARnZNhxjhjguAmoJimEMAJuNip/rJRd6/wyylHItomVpKTzZk9zrhTrQCoQ==} + dev: true + + /tinypool/0.3.0: + resolution: {integrity: sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ==} + engines: {node: '>=14.0.0'} + dev: true + + /tinyspy/1.0.2: + resolution: {integrity: sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==} + engines: {node: '>=14.0.0'} + dev: true + + /ts-node/10.9.1_hwinnrf7y5nyyzygpj45jmvjia: + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.3 + '@types/node': 18.7.13 + acorn: 8.8.0 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.8.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + + /type-detect/4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + + /typescript/4.8.2: + resolution: {integrity: sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /v8-compile-cache-lib/3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + + /v8-to-istanbul/9.0.1: + resolution: {integrity: sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==} + engines: {node: '>=10.12.0'} + dependencies: + '@jridgewell/trace-mapping': 0.3.15 + '@types/istanbul-lib-coverage': 2.0.4 + convert-source-map: 1.8.0 + dev: true + + /vite/3.1.3: + resolution: {integrity: sha512-/3XWiktaopByM5bd8dqvHxRt5EEgRikevnnrpND0gRfNkrMrPaGGexhtLCzv15RcCMtV2CLw+BPas8YFeSG0KA==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + less: '*' + sass: '*' + stylus: '*' + terser: ^5.4.0 + peerDependenciesMeta: + less: + optional: true + sass: + optional: true + stylus: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.15.9 + postcss: 8.4.16 + resolve: 1.22.1 + rollup: 2.78.1 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /vitest/0.23.4: + resolution: {integrity: sha512-iukBNWqQAv8EKDBUNntspLp9SfpaVFbmzmM0sNcnTxASQZMzRw3PsM6DMlsHiI+I6GeO5/sYDg3ecpC+SNFLrQ==} + engines: {node: '>=v14.16.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + dependencies: + '@types/chai': 4.3.3 + '@types/chai-subset': 1.3.3 + '@types/node': 18.7.13 + chai: 4.3.6 + debug: 4.3.4 + local-pkg: 0.4.2 + strip-literal: 0.4.2 + tinybench: 2.1.5 + tinypool: 0.3.0 + tinyspy: 1.0.2 + vite: 3.1.3 + transitivePeerDependencies: + - less + - sass + - stylus + - supports-color + - terser + dev: true + + /which/2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /wrap-ansi/7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrappy/1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /y18n/5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yargs-parser/20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + dev: true + + /yargs/16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + dev: true + + /yn/3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + + /yocto-queue/0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true diff --git a/packages/discord-markdown-parser/scripts/sha-tracker.json b/packages/discord-markdown-parser/scripts/sha-tracker.json new file mode 100644 index 0000000..69a88e3 --- /dev/null +++ b/packages/discord-markdown-parser/scripts/sha-tracker.json @@ -0,0 +1 @@ +{} diff --git a/packages/discord-markdown-parser/scripts/twemoji-regex-updater.mjs b/packages/discord-markdown-parser/scripts/twemoji-regex-updater.mjs new file mode 100644 index 0000000..e776cbc --- /dev/null +++ b/packages/discord-markdown-parser/scripts/twemoji-regex-updater.mjs @@ -0,0 +1,67 @@ +import { green, yellow } from 'colorette'; +import { rm, writeFile } from 'node:fs/promises'; +import { URL } from 'node:url'; + +async function importFileFromWeb({ url, temporaryFileName }) { + const body = await fetch(url).then((response) => response.text()); + + const temporaryOutputFile = new URL(temporaryFileName, import.meta.url); + + await writeFile(temporaryOutputFile, body); + const loadedModule = await import(temporaryOutputFile); + + await rm(temporaryOutputFile); + + return loadedModule; +} + +const filePrefix = [ + '/**', + ' * Regex that can capture a Twemoji (Twitter Emoji)', + ' * @raw {@linkplain https://github.com/twitter/twemoji-parser/blob/master/src/lib/regex.js See official source code}', + ' */', + 'export const TwemojiRegex =', + '\t', +].join('\n'); +const fileSuffix = [';', ''].join('\n'); + +const shaTrackerFileUrl = new URL('sha-tracker.json', import.meta.url); +const twemojiRegexFileUrl = new URL('../src/utils/twemojiRegex.ts', import.meta.url); +const oneMonthAgo = Date.now() - 1000 * 60 * 60 * 24 * 30; +const timestamp = new Date(oneMonthAgo).toISOString(); + +const url = new URL('https://api.github.com/repos/twitter/twemoji-parser/commits'); +url.searchParams.append('path', 'src/lib/regex.js'); +url.searchParams.append('since', timestamp); + +const [commits, { default: ciData }] = await Promise.all([ + fetch(url).then((res) => res.json()), // + import(shaTrackerFileUrl, { assert: { type: 'json' } }), // +]); + +const data = { sha: commits.length ? commits[0].sha : null, length: commits.length }; + +if (data.sha === null || data.sha === ciData.twemojiRegexLastSha) { + console.info(yellow('Fetched data but no new commit was available')); + + process.exit(0); +} + +const { default: regexFromWeb } = await importFileFromWeb({ + url: 'https://raw.githubusercontent.com/twitter/twemoji-parser/master/src/lib/regex.js', + temporaryFileName: 'regex.mjs', +}); + +const nonGlobalRegex = new RegExp(`^(${regexFromWeb.source})`, ''); + +const writePromises = [ + // + writeFile(twemojiRegexFileUrl, `${filePrefix}${nonGlobalRegex}${fileSuffix}`), +]; + +if (data.sha) + writePromises.push(writeFile(shaTrackerFileUrl, JSON.stringify({ ...ciData, twemojiRegexLastSha: data.sha }))); + +await Promise.all(writePromises); + +console.log(green(`Successfully wrote updated Twemoji Regex to file; Latest SHA ${data.sha}`)); diff --git a/packages/discord-markdown-parser/src/index.ts b/packages/discord-markdown-parser/src/index.ts new file mode 100644 index 0000000..c2f2767 --- /dev/null +++ b/packages/discord-markdown-parser/src/index.ts @@ -0,0 +1,72 @@ +import SimpleMarkdown from 'simple-markdown'; + +// import all the rules +import { everyone } from './rules/discord/everyone'; +import { twemoji } from './rules/discord/twemoji'; +import { channel } from './rules/discord/channel'; +import { timestamp } from './rules/discord/time'; +import { blockQuote } from './rules/blockQuote'; +import { strikethrough } from './rules/strike'; +import { codeBlock } from './rules/codeBlock'; +import { emoji } from './rules/discord/emoji'; +import { role } from './rules/discord/role'; +import { autolink } from './rules/autolink'; +import { here } from './rules/discord/here'; +import { emoticon } from './rules/emoticon'; +import { user } from './rules/discord/user'; +import { spoiler } from './rules/spoiler'; +import { text } from './rules/text'; +import { url } from './rules/url'; +import { em } from './rules/em'; +import { br } from './rules/br'; + +// rules normal users can use +export const rules = { + blockQuote, + codeBlock, + newline: SimpleMarkdown.defaultRules.newline, + escape: SimpleMarkdown.defaultRules.escape, + autolink, + url, + em, + strong: SimpleMarkdown.defaultRules.strong, + underline: SimpleMarkdown.defaultRules.u, + strikethrough, + inlineCode: SimpleMarkdown.defaultRules.inlineCode, + text, + emoticon, + br, + spoiler, + + // discord specific + user, + channel, + role, + emoji, + everyone, + here, + twemoji, + timestamp, +}; + +// for use in webhooks, embeds, etc +export const rulesExtended = { + ...rules, + link: SimpleMarkdown.defaultRules.link, +}; + +// build the parser +const parser = SimpleMarkdown.parserFor(rules); +const parserExtended = SimpleMarkdown.parserFor(rulesExtended); + +// parse function +export function parse(input: string, type: 'normal' | 'extended' = 'normal') { + if (type === 'normal') return parser(input, { inline: true }); + else return parserExtended(input, { inline: true }); +} + +export default parse; + +// some types +export type RuleTypes = keyof typeof rules; +export type RuleTypesExtended = keyof typeof rulesExtended; diff --git a/packages/discord-markdown-parser/src/rules/autolink.ts b/packages/discord-markdown-parser/src/rules/autolink.ts new file mode 100644 index 0000000..9e697c0 --- /dev/null +++ b/packages/discord-markdown-parser/src/rules/autolink.ts @@ -0,0 +1,19 @@ +import SimpleMarkdown from 'simple-markdown'; +import { extend } from '../utils/extend'; + +export const autolink = extend( + { + parse: (capture) => { + return { + content: [ + { + type: 'text', + content: capture[1], + }, + ], + target: capture[1], + }; + }, + }, + SimpleMarkdown.defaultRules.autolink +); diff --git a/packages/discord-markdown-parser/src/rules/blockQuote.ts b/packages/discord-markdown-parser/src/rules/blockQuote.ts new file mode 100644 index 0000000..4ac82d5 --- /dev/null +++ b/packages/discord-markdown-parser/src/rules/blockQuote.ts @@ -0,0 +1,24 @@ +import SimpleMarkdown from 'simple-markdown'; +import { extend } from '../utils/extend'; +import { BlockQuoteRegex } from '../utils/regex'; + +export const blockQuote: SimpleMarkdown.ParserRule = extend( + { + match: function (source, state, prevSource) { + return !/^$|\n *$/.test(prevSource) || state.inQuote ? null : BlockQuoteRegex.exec(source); + }, + + parse: function (capture, parse, state) { + const all = capture[0]; + const isBlock = Boolean(/^ *>>> ?/.exec(all)); + const removeSyntaxRegex = isBlock ? /^ *>>> ?/ : /^ *> ?/gm; + const content = all.replace(removeSyntaxRegex, ''); + + return { + content: parse(content, Object.assign({}, state, { inQuote: true })), + type: 'blockQuote', + }; + }, + }, + SimpleMarkdown.defaultRules.blockQuote +); diff --git a/packages/discord-markdown-parser/src/rules/br.ts b/packages/discord-markdown-parser/src/rules/br.ts new file mode 100644 index 0000000..f53acb1 --- /dev/null +++ b/packages/discord-markdown-parser/src/rules/br.ts @@ -0,0 +1,9 @@ +import SimpleMarkdown from 'simple-markdown'; +import { extend } from '../utils/extend'; + +export const br = extend( + { + match: SimpleMarkdown.anyScopeRegex(/^\n/), + }, + SimpleMarkdown.defaultRules.br +); diff --git a/packages/discord-markdown-parser/src/rules/codeBlock.ts b/packages/discord-markdown-parser/src/rules/codeBlock.ts new file mode 100644 index 0000000..fc4fcd7 --- /dev/null +++ b/packages/discord-markdown-parser/src/rules/codeBlock.ts @@ -0,0 +1,18 @@ +import SimpleMarkdown from 'simple-markdown'; +import { extend } from '../utils/extend'; +import { CodeBlockRegex } from '../utils/regex'; + +export const codeBlock = extend( + { + match: SimpleMarkdown.inlineRegex(CodeBlockRegex), + + parse: function (capture, _parse, state) { + return { + lang: (capture[2] || '').trim(), + content: capture[3] || '', + inQuote: state.inQuote || false, + }; + }, + }, + SimpleMarkdown.defaultRules.codeBlock +); diff --git a/packages/discord-markdown-parser/src/rules/discord/channel.ts b/packages/discord-markdown-parser/src/rules/discord/channel.ts new file mode 100644 index 0000000..95f310b --- /dev/null +++ b/packages/discord-markdown-parser/src/rules/discord/channel.ts @@ -0,0 +1,12 @@ +import SimpleMarkdown from 'simple-markdown'; +import { ChannelMentionRegex } from '../../utils/regex'; + +export const channel: SimpleMarkdown.ParserRule = { + order: SimpleMarkdown.defaultRules.strong.order, + match: (source) => ChannelMentionRegex.exec(source), + parse: function (capture) { + return { + id: capture[1], + }; + }, +}; diff --git a/packages/discord-markdown-parser/src/rules/discord/emoji.ts b/packages/discord-markdown-parser/src/rules/discord/emoji.ts new file mode 100644 index 0000000..7706643 --- /dev/null +++ b/packages/discord-markdown-parser/src/rules/discord/emoji.ts @@ -0,0 +1,14 @@ +import SimpleMarkdown from 'simple-markdown'; +import { EmojiRegex } from '../../utils/regex'; + +export const emoji: SimpleMarkdown.ParserRule = { + order: SimpleMarkdown.defaultRules.strong.order, + match: (source) => EmojiRegex.exec(source), + parse: function (capture) { + return { + animated: capture[1] === 'a', + name: capture[2], + id: capture[3], + }; + }, +}; diff --git a/packages/discord-markdown-parser/src/rules/discord/everyone.ts b/packages/discord-markdown-parser/src/rules/discord/everyone.ts new file mode 100644 index 0000000..340fddd --- /dev/null +++ b/packages/discord-markdown-parser/src/rules/discord/everyone.ts @@ -0,0 +1,10 @@ +import SimpleMarkdown from 'simple-markdown'; +import { EveryoneRegex } from '../../utils/regex'; + +export const everyone: SimpleMarkdown.ParserRule = { + order: SimpleMarkdown.defaultRules.strong.order, + match: (source) => EveryoneRegex.exec(source), + parse: function () { + return {}; + }, +}; diff --git a/packages/discord-markdown-parser/src/rules/discord/here.ts b/packages/discord-markdown-parser/src/rules/discord/here.ts new file mode 100644 index 0000000..dd7dd1f --- /dev/null +++ b/packages/discord-markdown-parser/src/rules/discord/here.ts @@ -0,0 +1,10 @@ +import SimpleMarkdown from 'simple-markdown'; +import { HereRegex } from '../../utils/regex'; + +export const here: SimpleMarkdown.ParserRule = { + order: SimpleMarkdown.defaultRules.strong.order, + match: (source) => HereRegex.exec(source), + parse: function () { + return {}; + }, +}; diff --git a/packages/discord-markdown-parser/src/rules/discord/role.ts b/packages/discord-markdown-parser/src/rules/discord/role.ts new file mode 100644 index 0000000..ea3c052 --- /dev/null +++ b/packages/discord-markdown-parser/src/rules/discord/role.ts @@ -0,0 +1,12 @@ +import SimpleMarkdown from 'simple-markdown'; +import { RoleMentionRegex } from '../../utils/regex'; + +export const role: SimpleMarkdown.ParserRule = { + order: SimpleMarkdown.defaultRules.strong.order, + match: (source) => RoleMentionRegex.exec(source), + parse: function (capture) { + return { + id: capture[1], + }; + }, +}; diff --git a/packages/discord-markdown-parser/src/rules/discord/time.ts b/packages/discord-markdown-parser/src/rules/discord/time.ts new file mode 100644 index 0000000..53dc3f0 --- /dev/null +++ b/packages/discord-markdown-parser/src/rules/discord/time.ts @@ -0,0 +1,13 @@ +import SimpleMarkdown from 'simple-markdown'; +import { TimestampRegex } from '../../utils/regex'; + +export const timestamp: SimpleMarkdown.ParserRule = { + order: SimpleMarkdown.defaultRules.strong.order, + match: (source) => TimestampRegex.exec(source), + parse: function (capture) { + return { + timestamp: capture[1], + format: capture[2], + }; + }, +}; diff --git a/packages/discord-markdown-parser/src/rules/discord/twemoji.ts b/packages/discord-markdown-parser/src/rules/discord/twemoji.ts new file mode 100644 index 0000000..8d772e7 --- /dev/null +++ b/packages/discord-markdown-parser/src/rules/discord/twemoji.ts @@ -0,0 +1,12 @@ +import SimpleMarkdown from 'simple-markdown'; +import { TwemojiRegex } from '../../utils/twemojiRegex'; + +export const twemoji: SimpleMarkdown.ParserRule = { + order: SimpleMarkdown.defaultRules.strong.order, + match: (source) => TwemojiRegex.exec(source), + parse: function (capture) { + return { + name: capture[0], + }; + }, +}; diff --git a/packages/discord-markdown-parser/src/rules/discord/user.ts b/packages/discord-markdown-parser/src/rules/discord/user.ts new file mode 100644 index 0000000..346dc9c --- /dev/null +++ b/packages/discord-markdown-parser/src/rules/discord/user.ts @@ -0,0 +1,13 @@ +import SimpleMarkdown from 'simple-markdown'; +import { UserMentionRegex } from '../../utils/regex'; + +export const user: SimpleMarkdown.ParserRule = { + order: SimpleMarkdown.defaultRules.strong.order, + match: (source) => UserMentionRegex.exec(source), + parse: function (capture) { + return { + id: capture[1], + type: 'user', + }; + }, +}; diff --git a/packages/discord-markdown-parser/src/rules/em.ts b/packages/discord-markdown-parser/src/rules/em.ts new file mode 100644 index 0000000..21e6355 --- /dev/null +++ b/packages/discord-markdown-parser/src/rules/em.ts @@ -0,0 +1,17 @@ +import { extend } from '../utils/extend'; +import SimpleMarkdown from 'simple-markdown'; + +export const em = extend( + { + parse: function (capture, parse, state) { + const parsed = SimpleMarkdown.defaultRules.em.parse( + capture, + parse, + Object.assign({}, state, { inEmphasis: true }) + ); + + return state.inEmphasis ? parsed.content : parsed; + }, + }, + SimpleMarkdown.defaultRules.em +); diff --git a/packages/discord-markdown-parser/src/rules/emoticon.ts b/packages/discord-markdown-parser/src/rules/emoticon.ts new file mode 100644 index 0000000..5481278 --- /dev/null +++ b/packages/discord-markdown-parser/src/rules/emoticon.ts @@ -0,0 +1,13 @@ +import SimpleMarkdown from 'simple-markdown'; +import { EmoticonRegex } from '../utils/regex'; + +export const emoticon: SimpleMarkdown.ParserRule = { + order: SimpleMarkdown.defaultRules.text.order, + match: (source) => EmoticonRegex.exec(source), + parse: function (capture) { + return { + type: 'text', + content: capture[1], + }; + }, +}; diff --git a/packages/discord-markdown-parser/src/rules/inlineCode.ts b/packages/discord-markdown-parser/src/rules/inlineCode.ts new file mode 100644 index 0000000..33ba57e --- /dev/null +++ b/packages/discord-markdown-parser/src/rules/inlineCode.ts @@ -0,0 +1,9 @@ +import SimpleMarkdown from 'simple-markdown'; +import { extend } from '../utils/extend'; + +export const inlineCode = extend( + { + match: (source) => SimpleMarkdown.defaultRules.inlineCode.match.regex!.exec(source), + }, + SimpleMarkdown.defaultRules.inlineCode +); diff --git a/packages/discord-markdown-parser/src/rules/spoiler.ts b/packages/discord-markdown-parser/src/rules/spoiler.ts new file mode 100644 index 0000000..79f7d1f --- /dev/null +++ b/packages/discord-markdown-parser/src/rules/spoiler.ts @@ -0,0 +1,12 @@ +import SimpleMarkdown from 'simple-markdown'; +import { SpoilerRegex } from '../utils/regex'; + +export const spoiler: SimpleMarkdown.ParserRule = { + order: 0, + match: (source) => SpoilerRegex.exec(source), + parse: function (capture, parse, state) { + return { + content: parse(capture[1], state), + }; + }, +}; diff --git a/packages/discord-markdown-parser/src/rules/strike.ts b/packages/discord-markdown-parser/src/rules/strike.ts new file mode 100644 index 0000000..68397b9 --- /dev/null +++ b/packages/discord-markdown-parser/src/rules/strike.ts @@ -0,0 +1,10 @@ +import SimpleMarkdown from 'simple-markdown'; +import { extend } from '../utils/extend'; +import { StrikeThroughRegex } from '../utils/regex'; + +export const strikethrough = extend( + { + match: SimpleMarkdown.inlineRegex(StrikeThroughRegex), + }, + SimpleMarkdown.defaultRules.del +); diff --git a/packages/discord-markdown-parser/src/rules/text.ts b/packages/discord-markdown-parser/src/rules/text.ts new file mode 100644 index 0000000..64eb35d --- /dev/null +++ b/packages/discord-markdown-parser/src/rules/text.ts @@ -0,0 +1,10 @@ +import SimpleMarkdown from 'simple-markdown'; +import { extend } from '../utils/extend'; +import { TextRegex } from '../utils/regex'; + +export const text = extend( + { + match: (source) => TextRegex.exec(source), + }, + SimpleMarkdown.defaultRules.text +); diff --git a/packages/discord-markdown-parser/src/rules/url.ts b/packages/discord-markdown-parser/src/rules/url.ts new file mode 100644 index 0000000..4122db6 --- /dev/null +++ b/packages/discord-markdown-parser/src/rules/url.ts @@ -0,0 +1,19 @@ +import SimpleMarkdown from 'simple-markdown'; +import { extend } from '../utils/extend'; + +export const url = extend( + { + parse: (capture) => { + return { + content: [ + { + type: 'text', + content: capture[1], + }, + ], + target: capture[1], + }; + }, + }, + SimpleMarkdown.defaultRules.url +); diff --git a/packages/discord-markdown-parser/src/tsconfig.json b/packages/discord-markdown-parser/src/tsconfig.json new file mode 100644 index 0000000..ab6cbff --- /dev/null +++ b/packages/discord-markdown-parser/src/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../tsconfig.json", + "include": ["."] +} diff --git a/packages/discord-markdown-parser/src/utils/extend.ts b/packages/discord-markdown-parser/src/utils/extend.ts new file mode 100644 index 0000000..1c6aa7e --- /dev/null +++ b/packages/discord-markdown-parser/src/utils/extend.ts @@ -0,0 +1,5 @@ +import { ParserRule } from 'simple-markdown'; + +export const extend = (additionalRules: Partial, defaultRule: ParserRule): ParserRule => { + return Object.assign({}, defaultRule, additionalRules); +}; diff --git a/packages/discord-markdown-parser/src/utils/regex.ts b/packages/discord-markdown-parser/src/utils/regex.ts new file mode 100644 index 0000000..865c757 --- /dev/null +++ b/packages/discord-markdown-parser/src/utils/regex.ts @@ -0,0 +1,25 @@ +export const ChannelMentionRegex = /^<#(\d{17,20})>/; + +export const EmojiRegex = /^<(a)?:(\w{2,32}):(\d{17,21})>/; + +export const RoleMentionRegex = /^<@&(\d{17,20})>/; + +export const UserMentionRegex = /^<@!?(\d{17,20})>/; + +export const EveryoneRegex = /^@everyone/; + +export const HereRegex = /^@here/; + +export const BlockQuoteRegex = /^( *>>> ([\s\S]*))|^( *> [^\n]*(\n *> [^\n]*)*\n?)/; + +export const CodeBlockRegex = /^```(([a-z0-9-]+?)\n+)?\n*([^]+?)\n*```/i; + +export const EmoticonRegex = /^(¯\\_\(ツ\)_\/¯)/; + +export const SpoilerRegex = /^\|\|([\s\S]+?)\|\|/; + +export const StrikeThroughRegex = /^~~([\s\S]+?)~~(?!_)/; + +export const TextRegex = /^[\s\S]+?(?=[^0-9A-Za-z\s]|\n\n|\n|\w+:\S|$)/; + +export const TimestampRegex = /^/; diff --git a/packages/discord-markdown-parser/src/utils/twemojiRegex.ts b/packages/discord-markdown-parser/src/utils/twemojiRegex.ts new file mode 100644 index 0000000..0ec0bb1 --- /dev/null +++ b/packages/discord-markdown-parser/src/utils/twemojiRegex.ts @@ -0,0 +1,6 @@ +/** + * Regex that can capture a Twemoji (Twitter Emoji) + * @raw {@linkplain https://github.com/twitter/twemoji-parser/blob/master/src/lib/regex.js See official source code} + */ +export const TwemojiRegex = + /^((?:\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83e\udef1\ud83c\udffb\u200d\ud83e\udef2\ud83c[\udffc-\udfff]|\ud83e\udef1\ud83c\udffc\u200d\ud83e\udef2\ud83c[\udffb\udffd-\udfff]|\ud83e\udef1\ud83c\udffd\u200d\ud83e\udef2\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\udef1\ud83c\udffe\u200d\ud83e\udef2\ud83c[\udffb-\udffd\udfff]|\ud83e\udef1\ud83c\udfff\u200d\ud83e\udef2\ud83c[\udffb-\udffe]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d\udc8f\ud83c[\udffb-\udfff]|\ud83d\udc91\ud83c[\udffb-\udfff]|\ud83e\udd1d\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d\udc8f\udc91]|\ud83e\udd1d)|(?:\ud83d[\udc68\udc69]|\ud83e\uddd1)(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc70\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd4\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83d\ude36\u200d\ud83c\udf2b\ufe0f|\u2764\ufe0f\u200d\ud83d\udd25|\u2764\ufe0f\u200d\ud83e\ude79|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc3b\u200d\u2744\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83d\ude2e\u200d\ud83d\udca8|\ud83d\ude35\u200d\ud83d\udcab|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f|\ud83d\udc08\u200d\u2b1b)|[#*0-9]\ufe0f?\u20e3|(?:[©®\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26a7\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0c\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\udd77\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd\udec3-\udec5\udef0-\udef6]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udc8e\udc90\udc92-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5-\uded7\udedd-\udedf\udeeb\udeec\udef4-\udefc\udfe0-\udfeb\udff0]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd76\udd78-\uddb4\uddb7\uddba\uddbc-\uddcc\uddd0\uddde-\uddff\ude70-\ude74\ude78-\ude7c\ude80-\ude86\ude90-\udeac\udeb0-\udeba\udec0-\udec2\uded0-\uded9\udee0-\udee7]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f)/; diff --git a/packages/discord-markdown-parser/tests/parse.test.ts b/packages/discord-markdown-parser/tests/parse.test.ts new file mode 100644 index 0000000..53c1ad2 --- /dev/null +++ b/packages/discord-markdown-parser/tests/parse.test.ts @@ -0,0 +1,328 @@ +import { parse } from '../src'; + +describe('Parse', () => { + test('GIVEN a normal string THEN parse is as a string', () => { + expect(parse('Hello world!')).toEqual([ + { + type: 'text', + content: 'Hello world', + }, + { + type: 'text', + content: '!', + }, + ]); + }); + + test('GIVEN a string with a twemoji THEN parse the twemoji', () => { + expect(parse('Hello world! 👀')).toEqual([ + { + type: 'text', + content: 'Hello world', + }, + { + type: 'text', + content: '! ', + }, + { + type: 'twemoji', + name: '👀', + }, + ]); + }); + + test('GIVEN a string with a emoji THEN parse the emoji', () => { + expect(parse('Hello 🦄 <:configuration:933601260559544330> ')).toEqual([ + { + type: 'text', + content: 'Hello ', + }, + { + type: 'twemoji', + name: '🦄', + }, + { + type: 'text', + content: ' ', + }, + { + type: 'emoji', + animated: false, + name: 'configuration', + id: '933601260559544330', + }, + { + type: 'text', + content: ' ', + }, + ]); + }); + + test('GIVEN a string with a user THEN parse the user', () => { + expect(parse('Hello <@!123456789123456780> ')).toEqual([ + { + type: 'text', + content: 'Hello ', + }, + { + type: 'user', + id: '123456789123456780', + }, + { + type: 'text', + content: ' ', + }, + ]); + }); + + test('GIVEN a string with a timestamp THEN parse the timestamp', () => { + expect(parse('Hello it is currently ')).toEqual([ + { + type: 'text', + content: 'Hello it is currently ', + }, + { + type: 'timestamp', + timestamp: '1664298780', + format: 'R', + }, + ]) + }) + + test('GIVEN a string with a role THEN parse the role', () => { + expect(parse('Hello <@&123456789123456780>')).toEqual([ + { + type: 'text', + content: 'Hello ', + }, + { + type: 'role', + id: '123456789123456780', + }, + ]); + }) + + test('GIVEN a string with a channel THEN parse the channel', () => { + expect(parse('See <#123456789123456780>')).toEqual([ + { + type: 'text', + content: 'See ', + }, + { + type: 'channel', + id: '123456789123456780', + }, + ]); + }) + + test('GIVEN a string with a link THEN parse the link', () => { + expect(parse('See https://google.com')).toEqual([ + { + type: 'text', + content: 'See ', + }, + { + type: 'url', + target: 'https://google.com', + content: [{ + type: 'text', + content: 'https://google.com', + }] + }, + ]); + }) + + test('GIVEN a string with a masked link without extended md support THEN do not parse as masked link', () => { + expect(parse('See [google](https://google.com)')).toEqual([ + { + type: 'text', + content: 'See ', + }, + { + type: 'text', + content: '[google' + }, + { + type: 'text', + content: ']' + }, + { + type: 'text', + content: '(' + }, + { + type: 'url', + target: 'https://google.com', + content: [{ + type: 'text', + content: 'https://google.com', + }] + }, + { + type: 'text', + content: ')' + }, + ]); + }) + + test('GIVEN a string with a masked link with extended md support THEN parse as masked link', () => { + expect(parse('See [google](https://google.com)', 'extended')).toEqual([ + { + type: 'text', + content: 'See ', + }, + { + type: 'link', + title: undefined, + target: 'https://google.com', + content: [{ + type: 'text', + content: 'google', + }] + }, + ]); + }) + + test('GIVEN a string with an autolink THEN parse the autolink', () => { + expect(parse('See ')).toEqual([ + { + type: 'text', + content: 'See ', + }, + { + type: 'autolink', + target: 'https://google.com', + content: [{ + type: 'text', + content: 'https://google.com', + }] + }, + ]); + }) + + test('GIVEN a string with a blockquote THEN parse the blockquote', () => { + expect(parse('> Hello world!')).toEqual([ + { + type: 'blockQuote', + content: [ + { + type: 'text', + content: 'Hello world', + }, + { + type: 'text', + content: '!', + }, + ] + }, + ]); + }) + + test('GIVEN a string with a multiline blockquote THEN parse the multiline blockquote', () => { + expect(parse('>>> Hello world!\nLine 2')).toEqual([ + { + type: 'blockQuote', + content: [ + { + type: 'text', + content: 'Hello world', + }, + { + type: 'text', + content: '!', + }, + { + type: 'br', + }, + { + type: 'text', + content: 'Line 2', + }, + ] + }, + ]); + }) + + test('GIVEN a string with a codeblock THEN parse the codeblock', () => { + expect(parse('```js\nconst a = 1;\n```')).toEqual([ + { + type: 'codeBlock', + lang: 'js', + inQuote: false, + content: 'const a = 1;', + }, + ]); + }) + + test('GIVEN a string with em THEN parse the em', () => { + expect(parse('*Hello world!*')).toEqual([ + { + type: 'em', + content: [ + { + type: 'text', + content: 'Hello world', + }, + { + type: 'text', + content: '!', + }, + ] + }, + ]); + }) + + test('GIVEN a string with a spoiler THEN parse the spoiler', () => { + expect(parse('Hello ||world||')).toEqual([ + { + type: 'text', + content: 'Hello ', + }, + { + type: 'spoiler', + content: [ + { + type: 'text', + content: 'world', + }, + ] + }, + ]); + }) + + test('GIVEN a @everyone mention THEN parse the @everyone mention', () => { + expect(parse('Hello @everyone')).toEqual([ + { + type: 'text', + content: 'Hello ', + }, + { + type: 'everyone', + }, + ]); + }) + + test('GIVEN a @here mention THEN parse the @here mention', () => { + expect(parse('Hello @here')).toEqual([ + { + type: 'text', + content: 'Hello ', + }, + { + type: 'here', + }, + ]); + }) + + // i have no idea why this is a thing + // src/rules/emoticon.ts + // but ig ill have to add a test for it + test('GIVEN string with ¯\\_(ツ)_/¯ THEN parse the ¯\\_(ツ)_/¯', () => { + expect(parse('¯\\_(ツ)_/¯')).toEqual([ + { + type: 'text', + content: '¯\\_(ツ)_/¯', + }, + ]); + }) +}); diff --git a/packages/discord-markdown-parser/tests/tsconfig.json b/packages/discord-markdown-parser/tests/tsconfig.json new file mode 100644 index 0000000..e2d27a7 --- /dev/null +++ b/packages/discord-markdown-parser/tests/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "types": ["vitest/globals"] + } +} diff --git a/packages/discord-markdown-parser/tsconfig.json b/packages/discord-markdown-parser/tsconfig.json new file mode 100644 index 0000000..d3707f7 --- /dev/null +++ b/packages/discord-markdown-parser/tsconfig.json @@ -0,0 +1,104 @@ +{ + "compilerOptions": { + "types": ["vitest/globals"], + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs" /* Specify what module code is generated. */, + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "dist" /* Specify an output folder for all emitted files. */, + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + + /* Type Checking */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/packages/discord-markdown-parser/vitest.config.ts b/packages/discord-markdown-parser/vitest.config.ts new file mode 100644 index 0000000..47b9f1b --- /dev/null +++ b/packages/discord-markdown-parser/vitest.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + globals: true, + coverage: { + enabled: true, + reporter: ['text', 'lcov', 'clover'], + provider: 'c8', + }, + }, +}); From e0a7c3368ef259e1b2e7767f9c29479559cbab9b Mon Sep 17 00:00:00 2001 From: Derock Date: Sat, 12 Aug 2023 22:49:26 -0700 Subject: [PATCH 4/4] fix eslint/tsconfig; run eslint fix --- .eslintrc.json | 14 +- .moon/toolchain.yml | 11 +- .vscode/settings.json | 4 +- package.json | 20 +- .../discord-components-core/.eslintrc.json | 8 + .../components/author-info/author-info.tsx | 3 +- .../discord-action-row/discord-action-row.tsx | 21 +- .../discord-attachment/discord-attachment.tsx | 3 +- .../discord-attachments.tsx | 3 +- .../discord-button/discord-button.tsx | 3 +- .../discord-code-block/discord-code-block.tsx | 3 +- .../discord-command/discord-command.tsx | 6 +- .../discord-custom-emoji.tsx | 3 +- .../discord-embed-description.tsx | 3 +- .../discord-embed-field.tsx | 3 +- .../discord-embed-fields.tsx | 3 +- .../discord-embed-footer.tsx | 6 +- .../discord-embed/discord-embed.tsx | 3 +- .../discord-header/discord-header.tsx | 3 +- .../discord-invite/discord-invite.tsx | 3 +- .../discord-mention/discord-mention.tsx | 3 +- .../discord-message/discord-message.tsx | 9 +- .../discord-messages/discord-messages.tsx | 3 +- .../discord-reaction/discord-reaction.tsx | 3 +- .../discord-reactions/discord-reactions.tsx | 3 +- .../discord-reply/discord-reply.tsx | 6 +- .../discord-system-message.tsx | 6 +- .../discord-tenor-video.tsx | 3 +- .../discord-thread-message.tsx | 6 +- .../discord-thread/discord-thread.tsx | 3 +- .../discord-components-core/stencil.config.ts | 2 +- .../tsconfig.eslint.json | 7 + .../discord-components-core/tsconfig.json | 16 +- .../discord-components-react/.eslintignore | 1 + .../discord-components-react/.eslintrc.json | 13 + .../createOverlayComponent.tsx | 5 +- .../discord-components-react/tsconfig.json | 20 +- .../discord-html-transcripts/tsconfig.json | 4 + .../.github/workflows/auto-updater.yml | 46 - packages/discord-markdown-parser/package.json | 3 +- .../src/rules/spoiler.ts | 2 +- .../src/utils/extend.ts | 2 +- .../tests/parse.test.ts | 91 +- .../discord-markdown-parser/tsconfig.json | 104 +- pnpm-lock.yaml | 1471 +++++++++++++++-- tsconfig.eslint.json | 15 +- tsconfig.json | 8 +- 47 files changed, 1598 insertions(+), 383 deletions(-) create mode 100644 packages/discord-components-core/.eslintrc.json create mode 100644 packages/discord-components-core/tsconfig.eslint.json create mode 100644 packages/discord-components-react/.eslintignore create mode 100644 packages/discord-components-react/.eslintrc.json create mode 100644 packages/discord-html-transcripts/tsconfig.json delete mode 100644 packages/discord-markdown-parser/.github/workflows/auto-updater.yml diff --git a/.eslintrc.json b/.eslintrc.json index ed7acb9..0f570b2 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,18 +1,26 @@ { + "root": true, + "env": { "browser": true, "es2021": true }, "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"], "parser": "@typescript-eslint/parser", - "ignorePatterns": ["dist"], + "ignorePatterns": ["**/dist/*"], "parserOptions": { - "project": "./tsconfig.eslint.json" + "project": ["./tsconfig.eslint.json", "./apps/*/tsconfig.eslint.json", "./packages/*/tsconfig.eslint.json"] }, "plugins": ["@typescript-eslint"], "rules": { "@typescript-eslint/switch-exhaustiveness-check": "error", "@typescript-eslint/consistent-type-imports": "error", - "@typescript-eslint/no-non-null-assertion": "off" + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-unused-vars": [ + "error", + { + "varsIgnorePattern": "^h$" + } + ] } } diff --git a/.moon/toolchain.yml b/.moon/toolchain.yml index b016cc6..8f21446 100644 --- a/.moon/toolchain.yml +++ b/.moon/toolchain.yml @@ -10,14 +10,15 @@ $schema: 'https://moonrepo.dev/schemas/toolchain.json' node: # The version to use. Must be a semantic version that includes major, minor, and patch. # We suggest using the latest active LTS version: https://nodejs.org/en/about/releases - version: '20.0.0' + version: '18.16.0' # The package manager to use when managing dependencies. # Accepts "npm" (default), "pnpm", or "yarn". packageManager: 'pnpm' # The version of the package manager (above) to use. - pnpm: {} + pnpm: + version: '8.6.0' # Add `node.version` as a constraint in the root `package.json` `engines`. addEnginesConstraint: true @@ -46,10 +47,10 @@ typescript: createMissingConfig: false # Name of `tsconfig.json` file in each project root. - # projectConfigFileName: 'tsconfig.json' + projectConfigFileName: 'tsconfig.json' # Name of `tsconfig.json` file in the workspace root. - # rootConfigFileName: 'tsconfig.json' + rootConfigFileName: 'tsconfig.json' # Name of the config file in the workspace root that defines shared compiler # options for all project reference based config files. @@ -65,4 +66,4 @@ typescript: # Sync a project's project references as import aliases to the `paths` # compiler option in each applicable project. - syncProjectReferencesToPaths: false \ No newline at end of file + syncProjectReferencesToPaths: false diff --git a/.vscode/settings.json b/.vscode/settings.json index 4203cbd..df8b1fc 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,5 +3,7 @@ "editor.codeActionsOnSave": { "source.fixAll.eslint": true, "source.organizeImports": false - } + }, + + "eslint.workingDirectories": ["./packages/*", "./apps/*"] } diff --git a/package.json b/package.json index 9b4fb9e..a2cdaaa 100644 --- a/package.json +++ b/package.json @@ -2,15 +2,23 @@ "name": "discord-html-transcripts", "version": "1.0.0", "description": "", - "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], - "author": "", + "author": "Derock ", "license": "Apache-2.0", - "workspaces": [ - "./packages/**", - "./apps/**" - ] + "repository": { + "type": "git", + "url": "git+https://github.com/ItzDerock/discord-html-transcripts" + }, + "devDependencies": { + "@types/react": "^18.0.27", + "eslint": "^8.47.0", + "vitest": "^0.34.1" + }, + "packageManager": "pnpm@8.6.0", + "engines": { + "node": "18.16.0" + } } diff --git a/packages/discord-components-core/.eslintrc.json b/packages/discord-components-core/.eslintrc.json new file mode 100644 index 0000000..cb435fb --- /dev/null +++ b/packages/discord-components-core/.eslintrc.json @@ -0,0 +1,8 @@ +{ + "extends": "../../.eslintrc.json", + "settings": { + "react": { + "pragma": "h" + } + } +} diff --git a/packages/discord-components-core/src/components/author-info/author-info.tsx b/packages/discord-components-core/src/components/author-info/author-info.tsx index 913de87..de3a48a 100644 --- a/packages/discord-components-core/src/components/author-info/author-info.tsx +++ b/packages/discord-components-core/src/components/author-info/author-info.tsx @@ -1,4 +1,5 @@ -import { FunctionalComponent, h } from '@stencil/core'; +import type { FunctionalComponent} from '@stencil/core'; +import { h } from '@stencil/core'; import Fragment from '../../Fragment'; import VerifiedTick from '../svgs/verified-tick'; diff --git a/packages/discord-components-core/src/components/discord-action-row/discord-action-row.tsx b/packages/discord-components-core/src/components/discord-action-row/discord-action-row.tsx index afb628b..30f3e0d 100644 --- a/packages/discord-components-core/src/components/discord-action-row/discord-action-row.tsx +++ b/packages/discord-components-core/src/components/discord-action-row/discord-action-row.tsx @@ -1,15 +1,16 @@ -import { Component, ComponentInterface, h, Host } from '@stencil/core'; +import type { ComponentInterface } from '@stencil/core'; +import { Component, h, Host } from '@stencil/core'; @Component({ - tag: 'discord-action-row', - styleUrl: 'discord-action-row.css' + tag: 'discord-action-row', + styleUrl: 'discord-action-row.css', }) export class DiscordActionRow implements ComponentInterface { - public render() { - return ( - - - - ); - } + public render() { + return ( + + + + ); + } } diff --git a/packages/discord-components-core/src/components/discord-attachment/discord-attachment.tsx b/packages/discord-components-core/src/components/discord-attachment/discord-attachment.tsx index 5102be9..790cd19 100644 --- a/packages/discord-components-core/src/components/discord-attachment/discord-attachment.tsx +++ b/packages/discord-components-core/src/components/discord-attachment/discord-attachment.tsx @@ -1,4 +1,5 @@ -import { Component, ComponentInterface, Element, h, Host, Prop } from '@stencil/core'; +import type { ComponentInterface} from '@stencil/core'; +import { Component, Element, h, Host, Prop } from '@stencil/core'; enum DiscordAttachmentType { IMAGE = 'image', diff --git a/packages/discord-components-core/src/components/discord-attachments/discord-attachments.tsx b/packages/discord-components-core/src/components/discord-attachments/discord-attachments.tsx index 2c54505..18a616d 100644 --- a/packages/discord-components-core/src/components/discord-attachments/discord-attachments.tsx +++ b/packages/discord-components-core/src/components/discord-attachments/discord-attachments.tsx @@ -1,4 +1,5 @@ -import { Component, ComponentInterface, h, Host } from '@stencil/core'; +import type { ComponentInterface} from '@stencil/core'; +import { Component, h, Host } from '@stencil/core'; @Component({ tag: 'discord-attachments', diff --git a/packages/discord-components-core/src/components/discord-button/discord-button.tsx b/packages/discord-components-core/src/components/discord-button/discord-button.tsx index e3b7da2..ad55863 100644 --- a/packages/discord-components-core/src/components/discord-button/discord-button.tsx +++ b/packages/discord-components-core/src/components/discord-button/discord-button.tsx @@ -1,4 +1,5 @@ -import { Component, ComponentInterface, Element, h, Host, Prop, Watch } from '@stencil/core'; +import type { ComponentInterface} from '@stencil/core'; +import { Component, Element, h, Host, Prop, Watch } from '@stencil/core'; import Fragment from '../../Fragment'; import LaunchIcon from '../svgs/launch-icon'; diff --git a/packages/discord-components-core/src/components/discord-code-block/discord-code-block.tsx b/packages/discord-components-core/src/components/discord-code-block/discord-code-block.tsx index 72a8090..5895820 100644 --- a/packages/discord-components-core/src/components/discord-code-block/discord-code-block.tsx +++ b/packages/discord-components-core/src/components/discord-code-block/discord-code-block.tsx @@ -1,4 +1,5 @@ -import { Component, Host, h, Prop, ComponentInterface } from '@stencil/core'; +import type { ComponentInterface } from '@stencil/core'; +import { Component, Host, h, Prop } from '@stencil/core'; import hljs from 'highlight.js'; @Component({ diff --git a/packages/discord-components-core/src/components/discord-command/discord-command.tsx b/packages/discord-components-core/src/components/discord-command/discord-command.tsx index f20323c..b8a98af 100644 --- a/packages/discord-components-core/src/components/discord-command/discord-command.tsx +++ b/packages/discord-components-core/src/components/discord-command/discord-command.tsx @@ -1,5 +1,7 @@ -import { Component, ComponentInterface, Element, h, Host, Prop } from '@stencil/core'; -import { avatars, Profile, profiles } from '../../options'; +import type { ComponentInterface} from '@stencil/core'; +import { Component, Element, h, Host, Prop } from '@stencil/core'; +import type { Profile} from '../../options'; +import { avatars, profiles } from '../../options'; import CommandIcon from '../svgs/command-icon'; @Component({ diff --git a/packages/discord-components-core/src/components/discord-custom-emoji/discord-custom-emoji.tsx b/packages/discord-components-core/src/components/discord-custom-emoji/discord-custom-emoji.tsx index 9aa6c05..ff21897 100644 --- a/packages/discord-components-core/src/components/discord-custom-emoji/discord-custom-emoji.tsx +++ b/packages/discord-components-core/src/components/discord-custom-emoji/discord-custom-emoji.tsx @@ -1,4 +1,5 @@ -import { Component, ComponentInterface, Element, h, Prop } from '@stencil/core'; +import type { ComponentInterface} from '@stencil/core'; +import { Component, Element, h, Prop } from '@stencil/core'; import { getGlobalEmojiUrl } from '../../util'; @Component({ diff --git a/packages/discord-components-core/src/components/discord-embed-description/discord-embed-description.tsx b/packages/discord-components-core/src/components/discord-embed-description/discord-embed-description.tsx index 4faa6e2..508c04d 100644 --- a/packages/discord-components-core/src/components/discord-embed-description/discord-embed-description.tsx +++ b/packages/discord-components-core/src/components/discord-embed-description/discord-embed-description.tsx @@ -1,4 +1,5 @@ -import { Component, ComponentInterface, Element, h, Host } from '@stencil/core'; +import type { ComponentInterface} from '@stencil/core'; +import { Component, Element, h, Host } from '@stencil/core'; @Component({ tag: 'discord-embed-description', diff --git a/packages/discord-components-core/src/components/discord-embed-field/discord-embed-field.tsx b/packages/discord-components-core/src/components/discord-embed-field/discord-embed-field.tsx index 90d020d..398cb98 100644 --- a/packages/discord-components-core/src/components/discord-embed-field/discord-embed-field.tsx +++ b/packages/discord-components-core/src/components/discord-embed-field/discord-embed-field.tsx @@ -1,4 +1,5 @@ -import { Component, ComponentInterface, Element, h, Host, Prop, Watch } from '@stencil/core'; +import type { ComponentInterface} from '@stencil/core'; +import { Component, Element, h, Host, Prop, Watch } from '@stencil/core'; import clsx from 'clsx'; import type { Emoji } from '../../options'; import { getGlobalEmojiUrl } from '../../util'; diff --git a/packages/discord-components-core/src/components/discord-embed-fields/discord-embed-fields.tsx b/packages/discord-components-core/src/components/discord-embed-fields/discord-embed-fields.tsx index 079ff6f..6f6f144 100644 --- a/packages/discord-components-core/src/components/discord-embed-fields/discord-embed-fields.tsx +++ b/packages/discord-components-core/src/components/discord-embed-fields/discord-embed-fields.tsx @@ -1,4 +1,5 @@ -import { Component, ComponentInterface, h, Host } from '@stencil/core'; +import type { ComponentInterface} from '@stencil/core'; +import { Component, h, Host } from '@stencil/core'; @Component({ tag: 'discord-embed-fields', diff --git a/packages/discord-components-core/src/components/discord-embed-footer/discord-embed-footer.tsx b/packages/discord-components-core/src/components/discord-embed-footer/discord-embed-footer.tsx index 2c697ae..7b3f8d8 100644 --- a/packages/discord-components-core/src/components/discord-embed-footer/discord-embed-footer.tsx +++ b/packages/discord-components-core/src/components/discord-embed-footer/discord-embed-footer.tsx @@ -1,6 +1,8 @@ -import { Component, ComponentInterface, Element, h, Host, Prop, Watch } from '@stencil/core'; +import type { ComponentInterface} from '@stencil/core'; +import { Component, Element, h, Host, Prop, Watch } from '@stencil/core'; import Fragment from '../../Fragment'; -import { DiscordTimestamp, handleTimestamp } from '../../util'; +import type { DiscordTimestamp} from '../../util'; +import { handleTimestamp } from '../../util'; @Component({ tag: 'discord-embed-footer', diff --git a/packages/discord-components-core/src/components/discord-embed/discord-embed.tsx b/packages/discord-components-core/src/components/discord-embed/discord-embed.tsx index e7851e8..82b1737 100644 --- a/packages/discord-components-core/src/components/discord-embed/discord-embed.tsx +++ b/packages/discord-components-core/src/components/discord-embed/discord-embed.tsx @@ -1,4 +1,5 @@ -import { Component, ComponentInterface, Element, h, Prop, State } from '@stencil/core'; +import type { ComponentInterface} from '@stencil/core'; +import { Component, Element, h, Prop, State } from '@stencil/core'; import clsx from 'clsx'; import Fragment from '../../Fragment'; import type { Emoji } from '../../options'; diff --git a/packages/discord-components-core/src/components/discord-header/discord-header.tsx b/packages/discord-components-core/src/components/discord-header/discord-header.tsx index a729c65..24fcd4b 100644 --- a/packages/discord-components-core/src/components/discord-header/discord-header.tsx +++ b/packages/discord-components-core/src/components/discord-header/discord-header.tsx @@ -1,4 +1,5 @@ -import { Component, Host, h, Prop, ComponentInterface } from '@stencil/core'; +import type { ComponentInterface } from '@stencil/core'; +import { Component, Host, h, Prop } from '@stencil/core'; @Component({ tag: 'discord-header', diff --git a/packages/discord-components-core/src/components/discord-invite/discord-invite.tsx b/packages/discord-components-core/src/components/discord-invite/discord-invite.tsx index e77ed02..b24bb77 100644 --- a/packages/discord-components-core/src/components/discord-invite/discord-invite.tsx +++ b/packages/discord-components-core/src/components/discord-invite/discord-invite.tsx @@ -1,4 +1,5 @@ -import { Component, ComponentInterface, Element, h, Prop } from '@stencil/core'; +import type { ComponentInterface} from '@stencil/core'; +import { Component, Element, h, Prop } from '@stencil/core'; import { defaultDiscordAvatars } from '../../options'; import GuildBadge from '../svgs/guild-badge'; import PartnerBadgeOverlay from '../svgs/partner-badge-overlay'; diff --git a/packages/discord-components-core/src/components/discord-mention/discord-mention.tsx b/packages/discord-components-core/src/components/discord-mention/discord-mention.tsx index d9d298f..bfef18a 100644 --- a/packages/discord-components-core/src/components/discord-mention/discord-mention.tsx +++ b/packages/discord-components-core/src/components/discord-mention/discord-mention.tsx @@ -1,4 +1,5 @@ -import { Component, ComponentInterface, Element, h, Host, Prop, Watch } from '@stencil/core'; +import type { ComponentInterface} from '@stencil/core'; +import { Component, Element, h, Host, Prop, Watch } from '@stencil/core'; import hexToRgba from 'hex-to-rgba'; import ChannelForum from '../svgs/channel-forum'; import ChannelIcon from '../svgs/channel-icon'; diff --git a/packages/discord-components-core/src/components/discord-message/discord-message.tsx b/packages/discord-components-core/src/components/discord-message/discord-message.tsx index b3eef2b..2da1c24 100644 --- a/packages/discord-components-core/src/components/discord-message/discord-message.tsx +++ b/packages/discord-components-core/src/components/discord-message/discord-message.tsx @@ -1,8 +1,11 @@ -import { Component, ComponentInterface, Element, h, Host, Prop, Watch } from '@stencil/core'; +import type { ComponentInterface} from '@stencil/core'; +import { Component, Element, h, Host, Prop, Watch } from '@stencil/core'; import clsx from 'clsx'; import Fragment from '../../Fragment'; -import { avatars, Profile, profiles } from '../../options'; -import { DiscordTimestamp, handleTimestamp } from '../../util'; +import type { Profile} from '../../options'; +import { avatars, profiles } from '../../options'; +import type { DiscordTimestamp} from '../../util'; +import { handleTimestamp } from '../../util'; import { AuthorInfo } from '../author-info/author-info'; import Ephemeral from '../svgs/ephemeral'; diff --git a/packages/discord-components-core/src/components/discord-messages/discord-messages.tsx b/packages/discord-components-core/src/components/discord-messages/discord-messages.tsx index 498479b..614acfc 100644 --- a/packages/discord-components-core/src/components/discord-messages/discord-messages.tsx +++ b/packages/discord-components-core/src/components/discord-messages/discord-messages.tsx @@ -1,4 +1,5 @@ -import { Component, ComponentInterface, h, Host, Prop } from '@stencil/core'; +import type { ComponentInterface} from '@stencil/core'; +import { Component, h, Host, Prop } from '@stencil/core'; import clsx from 'clsx'; import { defaultBackground, defaultMode, defaultTheme } from '../../options'; diff --git a/packages/discord-components-core/src/components/discord-reaction/discord-reaction.tsx b/packages/discord-components-core/src/components/discord-reaction/discord-reaction.tsx index 49afd83..67f1431 100644 --- a/packages/discord-components-core/src/components/discord-reaction/discord-reaction.tsx +++ b/packages/discord-components-core/src/components/discord-reaction/discord-reaction.tsx @@ -1,4 +1,5 @@ -import { Component, ComponentInterface, Element, h, Prop } from '@stencil/core'; +import type { ComponentInterface} from '@stencil/core'; +import { Component, Element, h, Prop } from '@stencil/core'; import clsx from 'clsx'; @Component({ diff --git a/packages/discord-components-core/src/components/discord-reactions/discord-reactions.tsx b/packages/discord-components-core/src/components/discord-reactions/discord-reactions.tsx index 1475a2e..aab855f 100644 --- a/packages/discord-components-core/src/components/discord-reactions/discord-reactions.tsx +++ b/packages/discord-components-core/src/components/discord-reactions/discord-reactions.tsx @@ -1,4 +1,5 @@ -import { Component, ComponentInterface, h, Host } from '@stencil/core'; +import type { ComponentInterface} from '@stencil/core'; +import { Component, h, Host } from '@stencil/core'; @Component({ tag: 'discord-reactions', diff --git a/packages/discord-components-core/src/components/discord-reply/discord-reply.tsx b/packages/discord-components-core/src/components/discord-reply/discord-reply.tsx index bb0f545..a537a48 100644 --- a/packages/discord-components-core/src/components/discord-reply/discord-reply.tsx +++ b/packages/discord-components-core/src/components/discord-reply/discord-reply.tsx @@ -1,6 +1,8 @@ -import { Component, ComponentInterface, Element, h, Host, Prop } from '@stencil/core'; +import type { ComponentInterface} from '@stencil/core'; +import { Component, Element, h, Host, Prop } from '@stencil/core'; import Fragment from '../../Fragment'; -import { avatars, Profile, profiles } from '../../options'; +import type { Profile} from '../../options'; +import { avatars, profiles } from '../../options'; import AttachmentReply from '../svgs/attachment-reply'; import CommandReply from '../svgs/command-reply'; import ReplyIcon from '../svgs/reply-icon'; diff --git a/packages/discord-components-core/src/components/discord-system-message/discord-system-message.tsx b/packages/discord-components-core/src/components/discord-system-message/discord-system-message.tsx index daee8cc..155a1ab 100644 --- a/packages/discord-components-core/src/components/discord-system-message/discord-system-message.tsx +++ b/packages/discord-components-core/src/components/discord-system-message/discord-system-message.tsx @@ -1,6 +1,8 @@ -import { Component, ComponentInterface, Element, h, Host, Prop, Watch } from '@stencil/core'; +import type { ComponentInterface} from '@stencil/core'; +import { Component, Element, h, Host, Prop, Watch } from '@stencil/core'; import clsx from 'clsx'; -import { DiscordTimestamp, handleTimestamp } from '../../util'; +import type { DiscordTimestamp} from '../../util'; +import { handleTimestamp } from '../../util'; import Boost from '../svgs/boost'; import DMCall from '../svgs/dm-call'; import DMEdit from '../svgs/dm-edit'; diff --git a/packages/discord-components-core/src/components/discord-tenor-video/discord-tenor-video.tsx b/packages/discord-components-core/src/components/discord-tenor-video/discord-tenor-video.tsx index fd86d0d..6457b1a 100644 --- a/packages/discord-components-core/src/components/discord-tenor-video/discord-tenor-video.tsx +++ b/packages/discord-components-core/src/components/discord-tenor-video/discord-tenor-video.tsx @@ -1,4 +1,5 @@ -import { Component, ComponentInterface, Element, h, Host, Prop } from '@stencil/core'; +import type { ComponentInterface} from '@stencil/core'; +import { Component, Element, h, Host, Prop } from '@stencil/core'; @Component({ tag: 'discord-tenor-video', diff --git a/packages/discord-components-core/src/components/discord-thread-message/discord-thread-message.tsx b/packages/discord-components-core/src/components/discord-thread-message/discord-thread-message.tsx index c85170d..4937fd1 100644 --- a/packages/discord-components-core/src/components/discord-thread-message/discord-thread-message.tsx +++ b/packages/discord-components-core/src/components/discord-thread-message/discord-thread-message.tsx @@ -1,6 +1,8 @@ -import { Component, ComponentInterface, Element, h, Host, Prop } from '@stencil/core'; +import type { ComponentInterface} from '@stencil/core'; +import { Component, Element, h, Host, Prop } from '@stencil/core'; import Fragment from '../../Fragment'; -import { avatars, Profile, profiles } from '../../options'; +import type { Profile} from '../../options'; +import { avatars, profiles } from '../../options'; import VerifiedTick from '../svgs/verified-tick'; @Component({ diff --git a/packages/discord-components-core/src/components/discord-thread/discord-thread.tsx b/packages/discord-components-core/src/components/discord-thread/discord-thread.tsx index 1a32cd0..d8db391 100644 --- a/packages/discord-components-core/src/components/discord-thread/discord-thread.tsx +++ b/packages/discord-components-core/src/components/discord-thread/discord-thread.tsx @@ -1,4 +1,5 @@ -import { Component, ComponentInterface, Element, h, Host, Prop } from '@stencil/core'; +import type { ComponentInterface} from '@stencil/core'; +import { Component, Element, h, Host, Prop } from '@stencil/core'; @Component({ tag: 'discord-thread', diff --git a/packages/discord-components-core/stencil.config.ts b/packages/discord-components-core/stencil.config.ts index b0e98b7..da7855f 100644 --- a/packages/discord-components-core/stencil.config.ts +++ b/packages/discord-components-core/stencil.config.ts @@ -1,4 +1,4 @@ -import { Config } from '@stencil/core'; +import type { Config } from '@stencil/core'; import { reactOutputTarget } from '@stencil/react-output-target'; export const config: Config = { diff --git a/packages/discord-components-core/tsconfig.eslint.json b/packages/discord-components-core/tsconfig.eslint.json new file mode 100644 index 0000000..a02f192 --- /dev/null +++ b/packages/discord-components-core/tsconfig.eslint.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.eslint.json", + "compilerOptions": { + "jsxFactory": "h" + }, + "include": ["src"] +} diff --git a/packages/discord-components-core/tsconfig.json b/packages/discord-components-core/tsconfig.json index 1608ad8..ed87376 100644 --- a/packages/discord-components-core/tsconfig.json +++ b/packages/discord-components-core/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "../../tsconfig.base.json", - "compilerOptions": { - "rootDir": "src", - "outDir": "dist", - "jsxFactory": "h", - "experimentalDecorators": true - }, - "include": ["src"] + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "jsxFactory": "h", + "experimentalDecorators": true + }, + "include": ["src"] } diff --git a/packages/discord-components-react/.eslintignore b/packages/discord-components-react/.eslintignore new file mode 100644 index 0000000..9c8ce89 --- /dev/null +++ b/packages/discord-components-react/.eslintignore @@ -0,0 +1 @@ +./**/* \ No newline at end of file diff --git a/packages/discord-components-react/.eslintrc.json b/packages/discord-components-react/.eslintrc.json new file mode 100644 index 0000000..a3e71e4 --- /dev/null +++ b/packages/discord-components-react/.eslintrc.json @@ -0,0 +1,13 @@ +{ + "extends": ["../../.eslintrc.json"], + "overrides": [ + { + "files": ["./**/*.ts", "./**/*.tsx"], + "rules": { + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/no-unused-vars": "off" + } + } + ] +} diff --git a/packages/discord-components-react/src/react-component-lib/createOverlayComponent.tsx b/packages/discord-components-react/src/react-component-lib/createOverlayComponent.tsx index 007aba0..56eacb0 100644 --- a/packages/discord-components-react/src/react-component-lib/createOverlayComponent.tsx +++ b/packages/discord-components-react/src/react-component-lib/createOverlayComponent.tsx @@ -1,8 +1,9 @@ import React from 'react'; import ReactDOM from 'react-dom'; -import { OverlayEventDetail } from './interfaces'; -import { StencilReactForwardedRef, attachProps, dashToPascalCase, defineCustomElement, setRef } from './utils'; +import type { OverlayEventDetail } from './interfaces'; +import type { StencilReactForwardedRef} from './utils'; +import { attachProps, dashToPascalCase, defineCustomElement, setRef } from './utils'; interface OverlayElement extends HTMLElement { present: () => Promise; diff --git a/packages/discord-components-react/tsconfig.json b/packages/discord-components-react/tsconfig.json index 76dbc14..43d5844 100644 --- a/packages/discord-components-react/tsconfig.json +++ b/packages/discord-components-react/tsconfig.json @@ -1,12 +1,12 @@ { - "extends": "../../tsconfig.base.json", - "compilerOptions": { - "rootDir": "src", - "outDir": "dist", - "module": "CommonJS", - "tsBuildInfoFile": "dist/.tsbuildinfo", - "importsNotUsedAsValues": "remove", - "declarationMap": true - }, - "include": ["src"] + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "module": "CommonJS", + "tsBuildInfoFile": "dist/.tsbuildinfo", + "importsNotUsedAsValues": "remove", + "declarationMap": true + }, + "include": ["src"] } diff --git a/packages/discord-html-transcripts/tsconfig.json b/packages/discord-html-transcripts/tsconfig.json new file mode 100644 index 0000000..52d43ea --- /dev/null +++ b/packages/discord-html-transcripts/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src/**/*"] +} diff --git a/packages/discord-markdown-parser/.github/workflows/auto-updater.yml b/packages/discord-markdown-parser/.github/workflows/auto-updater.yml deleted file mode 100644 index f308d19..0000000 --- a/packages/discord-markdown-parser/.github/workflows/auto-updater.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: Automatic Data Update - -on: - workflow_dispatch: - schedule: - - cron: '0 2 * * *' - -jobs: - DataUpdater: - name: Automatic Data Update - runs-on: ubuntu-latest - if: github.repository_owner == 'ItzDerock' - steps: - - name: Checkout Project - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - - name: Use Node.js v18 - uses: actions/setup-node@2fddd8803e2f5c9604345a0b591c3020ee971a93 # tag=v3 - with: - node-version: 18 - cache: npm - cache-dependency-path: './package-lock.json' - - name: Install Dependencies - run: npm install - - name: Run updater - run: node --experimental-json-modules scripts/twemoji-regex-updater.mjs - - name: Run prettier on the code - run: npm run format - - name: Commit any changes and create a pull request - env: - GITHUB_USER: github-actions[bot] - GITHUB_EMAIL: 41898282+github-actions[bot]@users.noreply.github.com - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - git add .; - if git diff-index --quiet HEAD --; then - echo "No changes to commit, exiting with code 0" - exit 0; - else - git remote set-url origin "https://${GITHUB_TOKEN}:x-oauth-basic@github.com/${GITHUB_REPOSITORY}.git"; - git config --local user.email "${GITHUB_EMAIL}"; - git config --local user.name "${GITHUB_USER}"; - git checkout -b update-twemoji-regex/$(date +%F-%H-%M); - git commit -sam "feat: update Twemoji Regex"; - git push --set-upstream origin $(git rev-parse --abbrev-ref HEAD) - gh pr create -t "feat: update twemoji regex" -b "*bleep bloop* I updated the Twemoji Regex" -B main; - fi diff --git a/packages/discord-markdown-parser/package.json b/packages/discord-markdown-parser/package.json index a065e22..a999ce8 100644 --- a/packages/discord-markdown-parser/package.json +++ b/packages/discord-markdown-parser/package.json @@ -13,7 +13,8 @@ "build": "tsc -b src", "format": "prettier --write --cache \"{src,scripts}/**/*.{mjs,ts,js}\"", "test": "vitest run", - "release": "npm run build && npm pack" + "release": "npm run build && npm pack", + "update-twemoji": "node scripts/twemoji-regex-updater.mjs" }, "keywords": [ "discord", diff --git a/packages/discord-markdown-parser/src/rules/spoiler.ts b/packages/discord-markdown-parser/src/rules/spoiler.ts index 79f7d1f..b8b04f6 100644 --- a/packages/discord-markdown-parser/src/rules/spoiler.ts +++ b/packages/discord-markdown-parser/src/rules/spoiler.ts @@ -1,4 +1,4 @@ -import SimpleMarkdown from 'simple-markdown'; +import type SimpleMarkdown from 'simple-markdown'; import { SpoilerRegex } from '../utils/regex'; export const spoiler: SimpleMarkdown.ParserRule = { diff --git a/packages/discord-markdown-parser/src/utils/extend.ts b/packages/discord-markdown-parser/src/utils/extend.ts index 1c6aa7e..96a9414 100644 --- a/packages/discord-markdown-parser/src/utils/extend.ts +++ b/packages/discord-markdown-parser/src/utils/extend.ts @@ -1,4 +1,4 @@ -import { ParserRule } from 'simple-markdown'; +import type { ParserRule } from 'simple-markdown'; export const extend = (additionalRules: Partial, defaultRule: ParserRule): ParserRule => { return Object.assign({}, defaultRule, additionalRules); diff --git a/packages/discord-markdown-parser/tests/parse.test.ts b/packages/discord-markdown-parser/tests/parse.test.ts index 53c1ad2..37275f3 100644 --- a/packages/discord-markdown-parser/tests/parse.test.ts +++ b/packages/discord-markdown-parser/tests/parse.test.ts @@ -1,4 +1,7 @@ import { parse } from '../src'; +// TODO: figure out why ts isn't happy with using globals. +// https://vitest.dev/config/#globals +import { describe, test, expect } from 'vitest'; describe('Parse', () => { test('GIVEN a normal string THEN parse is as a string', () => { @@ -86,8 +89,8 @@ describe('Parse', () => { timestamp: '1664298780', format: 'R', }, - ]) - }) + ]); + }); test('GIVEN a string with a role THEN parse the role', () => { expect(parse('Hello <@&123456789123456780>')).toEqual([ @@ -100,7 +103,7 @@ describe('Parse', () => { id: '123456789123456780', }, ]); - }) + }); test('GIVEN a string with a channel THEN parse the channel', () => { expect(parse('See <#123456789123456780>')).toEqual([ @@ -113,7 +116,7 @@ describe('Parse', () => { id: '123456789123456780', }, ]); - }) + }); test('GIVEN a string with a link THEN parse the link', () => { expect(parse('See https://google.com')).toEqual([ @@ -124,13 +127,15 @@ describe('Parse', () => { { type: 'url', target: 'https://google.com', - content: [{ - type: 'text', - content: 'https://google.com', - }] + content: [ + { + type: 'text', + content: 'https://google.com', + }, + ], }, ]); - }) + }); test('GIVEN a string with a masked link without extended md support THEN do not parse as masked link', () => { expect(parse('See [google](https://google.com)')).toEqual([ @@ -140,30 +145,32 @@ describe('Parse', () => { }, { type: 'text', - content: '[google' + content: '[google', }, { type: 'text', - content: ']' + content: ']', }, { type: 'text', - content: '(' + content: '(', }, { type: 'url', target: 'https://google.com', - content: [{ - type: 'text', - content: 'https://google.com', - }] + content: [ + { + type: 'text', + content: 'https://google.com', + }, + ], }, { type: 'text', - content: ')' + content: ')', }, ]); - }) + }); test('GIVEN a string with a masked link with extended md support THEN parse as masked link', () => { expect(parse('See [google](https://google.com)', 'extended')).toEqual([ @@ -175,13 +182,15 @@ describe('Parse', () => { type: 'link', title: undefined, target: 'https://google.com', - content: [{ - type: 'text', - content: 'google', - }] + content: [ + { + type: 'text', + content: 'google', + }, + ], }, ]); - }) + }); test('GIVEN a string with an autolink THEN parse the autolink', () => { expect(parse('See ')).toEqual([ @@ -192,13 +201,15 @@ describe('Parse', () => { { type: 'autolink', target: 'https://google.com', - content: [{ - type: 'text', - content: 'https://google.com', - }] + content: [ + { + type: 'text', + content: 'https://google.com', + }, + ], }, ]); - }) + }); test('GIVEN a string with a blockquote THEN parse the blockquote', () => { expect(parse('> Hello world!')).toEqual([ @@ -213,10 +224,10 @@ describe('Parse', () => { type: 'text', content: '!', }, - ] + ], }, ]); - }) + }); test('GIVEN a string with a multiline blockquote THEN parse the multiline blockquote', () => { expect(parse('>>> Hello world!\nLine 2')).toEqual([ @@ -238,10 +249,10 @@ describe('Parse', () => { type: 'text', content: 'Line 2', }, - ] + ], }, ]); - }) + }); test('GIVEN a string with a codeblock THEN parse the codeblock', () => { expect(parse('```js\nconst a = 1;\n```')).toEqual([ @@ -252,7 +263,7 @@ describe('Parse', () => { content: 'const a = 1;', }, ]); - }) + }); test('GIVEN a string with em THEN parse the em', () => { expect(parse('*Hello world!*')).toEqual([ @@ -267,10 +278,10 @@ describe('Parse', () => { type: 'text', content: '!', }, - ] + ], }, ]); - }) + }); test('GIVEN a string with a spoiler THEN parse the spoiler', () => { expect(parse('Hello ||world||')).toEqual([ @@ -285,10 +296,10 @@ describe('Parse', () => { type: 'text', content: 'world', }, - ] + ], }, ]); - }) + }); test('GIVEN a @everyone mention THEN parse the @everyone mention', () => { expect(parse('Hello @everyone')).toEqual([ @@ -300,7 +311,7 @@ describe('Parse', () => { type: 'everyone', }, ]); - }) + }); test('GIVEN a @here mention THEN parse the @here mention', () => { expect(parse('Hello @here')).toEqual([ @@ -312,7 +323,7 @@ describe('Parse', () => { type: 'here', }, ]); - }) + }); // i have no idea why this is a thing // src/rules/emoticon.ts @@ -324,5 +335,5 @@ describe('Parse', () => { content: '¯\\_(ツ)_/¯', }, ]); - }) + }); }); diff --git a/packages/discord-markdown-parser/tsconfig.json b/packages/discord-markdown-parser/tsconfig.json index d3707f7..c8e5dcf 100644 --- a/packages/discord-markdown-parser/tsconfig.json +++ b/packages/discord-markdown-parser/tsconfig.json @@ -1,104 +1,8 @@ { + "extends": "../../tsconfig.json", "compilerOptions": { "types": ["vitest/globals"], - /* Visit https://aka.ms/tsconfig to read more about this file */ - - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "commonjs" /* Specify what module code is generated. */, - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - "outDir": "dist" /* Specify an output folder for all emitted files. */, - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - - /* Type Checking */ - "strict": true /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } + "outDir": "dist" + }, + "include": ["src"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 33baef0..514ee37 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,75 +4,173 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@derockdev/discord-components-core': - specifier: ^3.5.3 - version: 3.5.3 - '@derockdev/discord-components-react': - specifier: ^3.5.3 - version: 3.5.3(react-dom@18.2.0)(react@18.2.0) - discord-markdown-parser: - specifier: ~1.1.0 - version: 1.1.0 - react: - specifier: ^18.2.0 - version: 18.2.0 - react-dom: - specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) - simple-markdown: - specifier: ^0.7.3 - version: 0.7.3 - twemoji: - specifier: ^14.0.2 - version: 14.0.2 - undici: - specifier: ^5.21.0 - version: 5.21.0 - -devDependencies: - '@types/node': - specifier: ^18.11.18 - version: 18.11.18 - '@types/react': - specifier: ^18.0.27 - version: 18.0.27 - '@types/react-dom': - specifier: ^18.0.10 - version: 18.0.10 - '@typescript-eslint/eslint-plugin': - specifier: ^5.49.0 - version: 5.49.0(@typescript-eslint/parser@5.49.0)(eslint@8.32.0)(typescript@5.1.6) - '@typescript-eslint/parser': - specifier: ^5.49.0 - version: 5.49.0(eslint@8.32.0)(typescript@5.1.6) - discord.js: - specifier: ^14.12.0 - version: 14.12.0 - dotenv: - specifier: ^16.0.3 - version: 16.0.3 - eslint: - specifier: ^8.32.0 - version: 8.32.0 - husky: - specifier: ^8.0.3 - version: 8.0.3 - prettier: - specifier: ^2.8.3 - version: 2.8.3 - pretty-quick: - specifier: ^3.1.3 - version: 3.1.3(prettier@2.8.3) - ts-node: - specifier: ^10.9.1 - version: 10.9.1(@types/node@18.11.18)(typescript@5.1.6) - typescript: - specifier: ^5.1.6 - version: 5.1.6 +importers: + + .: + devDependencies: + '@types/react': + specifier: ^18.0.27 + version: 18.0.27 + eslint: + specifier: ^8.47.0 + version: 8.47.0 + vitest: + specifier: ^0.34.1 + version: 0.34.1 + + packages/discord-components-core: + dependencies: + '@stencil/core': + specifier: ^2.22.1 + version: 2.22.2 + clsx: + specifier: ^1.2.1 + version: 1.2.1 + hex-to-rgba: + specifier: ^2.0.1 + version: 2.0.1 + highlight.js: + specifier: ^11.6.0 + version: 11.7.0 + devDependencies: + '@sapphire/ts-config': + specifier: ^3.3.4 + version: 3.3.4 + replace-in-file: + specifier: ^6.3.5 + version: 6.3.5 + tslib: + specifier: ^2.4.0 + version: 2.4.1 + + packages/discord-components-react: + dependencies: + '@derockdev/discord-components-core': + specifier: ^3.5.1 + version: 3.5.3 + react: + specifier: 16.8.x || 17.x || 18.x + version: 18.2.0 + react-dom: + specifier: 16.8.x || 17.x || 18.x + version: 18.2.0(react@18.2.0) + tslib: + specifier: ^2.4.0 + version: 2.4.1 + devDependencies: + gen-esm-wrapper: + specifier: ^1.1.3 + version: 1.1.3 + replace-in-file: + specifier: ^6.3.5 + version: 6.3.5 + + packages/discord-html-transcripts: + dependencies: + '@derockdev/discord-components-core': + specifier: ^3.5.3 + version: 3.5.3 + '@derockdev/discord-components-react': + specifier: ^3.5.3 + version: 3.5.3(react-dom@18.2.0)(react@18.2.0) + discord-markdown-parser: + specifier: ~1.1.0 + version: link:../discord-markdown-parser + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + simple-markdown: + specifier: ^0.7.3 + version: 0.7.3 + twemoji: + specifier: ^14.0.2 + version: 14.0.2 + undici: + specifier: ^5.21.0 + version: 5.21.0 + devDependencies: + '@types/node': + specifier: ^18.11.18 + version: 18.11.18 + '@types/react': + specifier: ^18.0.27 + version: 18.0.27 + '@types/react-dom': + specifier: ^18.0.10 + version: 18.0.10 + '@typescript-eslint/eslint-plugin': + specifier: ^5.49.0 + version: 5.49.0(@typescript-eslint/parser@5.49.0)(eslint@8.32.0)(typescript@5.1.6) + '@typescript-eslint/parser': + specifier: ^5.49.0 + version: 5.49.0(eslint@8.32.0)(typescript@5.1.6) + discord.js: + specifier: ^14.12.0 + version: 14.12.0 + dotenv: + specifier: ^16.0.3 + version: 16.0.3 + eslint: + specifier: ^8.32.0 + version: 8.32.0 + husky: + specifier: ^8.0.3 + version: 8.0.3 + prettier: + specifier: ^2.8.3 + version: 2.8.3 + pretty-quick: + specifier: ^3.1.3 + version: 3.1.3(prettier@2.8.3) + ts-node: + specifier: ^10.9.1 + version: 10.9.1(@types/node@18.11.18)(typescript@5.1.6) + typescript: + specifier: ^5.1.6 + version: 5.1.6 + + packages/discord-markdown-parser: + dependencies: + simple-markdown: + specifier: ^0.7.3 + version: 0.7.3 + devDependencies: + '@types/node': + specifier: ^18.7.13 + version: 18.11.18 + '@vitest/coverage-c8': + specifier: ^0.23.4 + version: 0.23.4 + colorette: + specifier: ^2.0.19 + version: 2.0.19 + prettier: + specifier: ^2.7.1 + version: 2.8.3 + ts-node: + specifier: ^10.9.1 + version: 10.9.1(@types/node@18.11.18)(typescript@4.8.2) + typescript: + specifier: ^4.8.2 + version: 4.8.2 + vitest: + specifier: ^0.23.4 + version: 0.23.4 packages: + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + + /@bcoe/v8-coverage@0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: true + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -100,7 +198,7 @@ packages: '@derockdev/discord-components-core': 3.5.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - tslib: 2.4.1 + tslib: 2.6.1 dev: false /@discordjs/builders@1.6.4: @@ -166,6 +264,39 @@ packages: - utf-8-validate dev: true + /@esbuild/android-arm@0.15.18: + resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.15.18: + resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@eslint-community/eslint-utils@4.4.0(eslint@8.47.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.47.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/regexpp@4.6.2: + resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + /@eslint/eslintrc@1.4.1: resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -183,6 +314,39 @@ packages: - supports-color dev: true + /@eslint/eslintrc@2.1.2: + resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.19.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@8.47.0: + resolution: {integrity: sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@humanwhocodes/config-array@0.11.10: + resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + /@humanwhocodes/config-array@0.11.8: resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} engines: {node: '>=10.10.0'} @@ -203,20 +367,39 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true + /@istanbuljs/schema@0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: true + + /@jest/schemas@29.6.0: + resolution: {integrity: sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/sourcemap-codec@1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@jridgewell/trace-mapping@0.3.19: + resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.15 dev: true /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/sourcemap-codec': 1.4.15 dev: true /@nodelib/fs.scandir@2.1.5: @@ -258,6 +441,18 @@ packages: engines: {node: '>=v14.0.0', npm: '>=7.0.0'} dev: true + /@sapphire/ts-config@3.3.4: + resolution: {integrity: sha512-mWEUxCXh3cHKI7C8HJ049exVTMNaq+A/lJEDfM5ENSQ/OOZHd5DdmXn2jrYqFWbTRCHa0Vp2FAmACWBwePsBtg==} + engines: {node: '>=v16.0.0', npm: '>=8.0.0'} + dependencies: + tslib: 2.6.1 + typescript: 4.8.2 + dev: true + + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + /@stencil/core@2.22.2: resolution: {integrity: sha512-r+vbxsGNcBaV1VDOYW25lv4QfXTlNoIb5GpUX7rZ+cr59yqYCZC5tlV+IzX6YgHKW62ulCc9M3RYtTfHtNbNNw==} engines: {node: '>=12.10.0', npm: '>=6.0.0'} @@ -280,6 +475,20 @@ packages: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} dev: true + /@types/chai-subset@1.3.3: + resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} + dependencies: + '@types/chai': 4.3.5 + dev: true + + /@types/chai@4.3.5: + resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==} + dev: true + + /@types/istanbul-lib-coverage@2.0.4: + resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + dev: true + /@types/json-schema@7.0.11: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true @@ -341,7 +550,7 @@ packages: ignore: 5.2.4 natural-compare-lite: 1.4.0 regexpp: 3.2.0 - semver: 7.3.8 + semver: 7.5.4 tsutils: 3.21.0(typescript@5.1.6) typescript: 5.1.6 transitivePeerDependencies: @@ -415,7 +624,7 @@ packages: debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.3.8 + semver: 7.5.4 tsutils: 3.21.0(typescript@5.1.6) typescript: 5.1.6 transitivePeerDependencies: @@ -436,7 +645,7 @@ packages: eslint: 8.32.0 eslint-scope: 5.1.1 eslint-utils: 3.0.0(eslint@8.32.0) - semver: 7.3.8 + semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript @@ -450,17 +659,75 @@ packages: eslint-visitor-keys: 3.3.0 dev: true + /@vitest/coverage-c8@0.23.4: + resolution: {integrity: sha512-jmD00a5DQH9gu9K+YdvVhcMuv2CzHvU4gCnySS40Ec5hKlXtlCzRfNHl00VnhfuBeaQUmaQYe60BLT413HyDdg==} + deprecated: v8 coverage is moved to @vitest/coverage-v8 package + dependencies: + c8: 7.14.0 + vitest: 0.23.4 + transitivePeerDependencies: + - '@edge-runtime/vm' + - '@vitest/browser' + - '@vitest/ui' + - happy-dom + - jsdom + - less + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /@vitest/expect@0.34.1: + resolution: {integrity: sha512-q2CD8+XIsQ+tHwypnoCk8Mnv5e6afLFvinVGCq3/BOT4kQdVQmY6rRfyKkwcg635lbliLPqbunXZr+L1ssUWiQ==} + dependencies: + '@vitest/spy': 0.34.1 + '@vitest/utils': 0.34.1 + chai: 4.3.7 + dev: true + + /@vitest/runner@0.34.1: + resolution: {integrity: sha512-YfQMpYzDsYB7yqgmlxZ06NI4LurHWfrH7Wy3Pvf/z/vwUSgq1zLAb1lWcItCzQG+NVox+VvzlKQrYEXb47645g==} + dependencies: + '@vitest/utils': 0.34.1 + p-limit: 4.0.0 + pathe: 1.1.1 + dev: true + + /@vitest/snapshot@0.34.1: + resolution: {integrity: sha512-0O9LfLU0114OqdF8lENlrLsnn024Tb1CsS9UwG0YMWY2oGTQfPtkW+B/7ieyv0X9R2Oijhi3caB1xgGgEgclSQ==} + dependencies: + magic-string: 0.30.2 + pathe: 1.1.1 + pretty-format: 29.6.2 + dev: true + + /@vitest/spy@0.34.1: + resolution: {integrity: sha512-UT4WcI3EAPUNO8n6y9QoEqynGGEPmmRxC+cLzneFFXpmacivjHZsNbiKD88KUScv5DCHVDgdBsLD7O7s1enFcQ==} + dependencies: + tinyspy: 2.1.1 + dev: true + + /@vitest/utils@0.34.1: + resolution: {integrity: sha512-/ql9dsFi4iuEbiNcjNHQWXBum7aL8pyhxvfnD9gNtbjR9fUKAjxhj4AA3yfLXg6gJpMGGecvtF8Au2G9y3q47Q==} + dependencies: + diff-sequences: 29.4.3 + loupe: 2.3.6 + pretty-format: 29.6.2 + dev: true + /@vladfrangu/async_event_emitter@2.2.2: resolution: {integrity: sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} dev: true - /acorn-jsx@5.3.2(acorn@8.8.2): + /acorn-jsx@5.3.2(acorn@8.10.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.8.2 + acorn: 8.10.0 dev: true /acorn-walk@8.2.0: @@ -468,8 +735,8 @@ packages: engines: {node: '>=0.4.0'} dev: true - /acorn@8.8.2: - resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -495,6 +762,11 @@ packages: color-convert: 2.0.1 dev: true + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true @@ -518,6 +790,17 @@ packages: engines: {node: '>=8'} dev: true + /assert@1.5.0: + resolution: {integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==} + dependencies: + object-assign: 4.1.1 + util: 0.10.3 + dev: true + + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true @@ -542,11 +825,48 @@ packages: dependencies: streamsearch: 1.1.0 + /c8@7.14.0: + resolution: {integrity: sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw==} + engines: {node: '>=10.12.0'} + hasBin: true + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@istanbuljs/schema': 0.1.3 + find-up: 5.0.0 + foreground-child: 2.0.0 + istanbul-lib-coverage: 3.2.0 + istanbul-lib-report: 3.0.1 + istanbul-reports: 3.1.6 + rimraf: 3.0.2 + test-exclude: 6.0.0 + v8-to-istanbul: 9.1.0 + yargs: 16.2.0 + yargs-parser: 20.2.9 + dev: true + + /cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + dev: true + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} dev: true + /chai@4.3.7: + resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.2 + deep-eql: 4.1.3 + get-func-name: 2.0.0 + loupe: 2.3.6 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + /chalk@3.0.0: resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} engines: {node: '>=8'} @@ -563,6 +883,27 @@ packages: supports-color: 7.2.0 dev: true + /check-error@1.0.2: + resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} + dev: true + + /cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + /clsx@1.2.1: resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} engines: {node: '>=6'} @@ -579,8 +920,16 @@ packages: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: true + /colorette@2.0.19: + resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} + dev: true + /concat-map@0.0.1: - resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} dev: true /create-require@1.1.1: @@ -611,10 +960,22 @@ packages: ms: 2.1.2 dev: true + /deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 + dev: true + /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true + /diff-sequences@29.4.3: + resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -631,12 +992,6 @@ packages: resolution: {integrity: sha512-tdmdH98t3zgjQF6zwOHl0OB/PCBiE4aVsNTuN7m0PfU2jOLx3lNoU6xTeFALntUtlIxN80GTr9RPQR4t7msjSg==} dev: true - /discord-markdown-parser@1.1.0: - resolution: {integrity: sha512-o2+iFgt5qer6UYY5hVTPGq2mGzleKRGYKcvymg67FdKg4AMJ061KbebKunCERWKjx79dmNHMDnGV2F0DRGCNkw==} - dependencies: - simple-markdown: 0.7.3 - dev: false - /discord.js@14.12.0: resolution: {integrity: sha512-rvqwvcu73p8QCsy90klZ6n8HLfaN9SCCKyGGrgVIHcJ3ywUzr1hU67Zm/0c7h2PR45ySZqSHV8x2mIfJ1+n/OA==} engines: {node: '>=16.9.0'} @@ -672,12 +1027,231 @@ packages: engines: {node: '>=12'} dev: true + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + /end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 dev: true + /esbuild-android-64@0.15.18: + resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64@0.15.18: + resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64@0.15.18: + resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64@0.15.18: + resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64@0.15.18: + resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64@0.15.18: + resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32@0.15.18: + resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64@0.15.18: + resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64@0.15.18: + resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm@0.15.18: + resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le@0.15.18: + resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le@0.15.18: + resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64@0.15.18: + resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x@0.15.18: + resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64@0.15.18: + resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64@0.15.18: + resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64@0.15.18: + resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32@0.15.18: + resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64@0.15.18: + resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64@0.15.18: + resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild@0.15.18: + resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.15.18 + '@esbuild/linux-loong64': 0.15.18 + esbuild-android-64: 0.15.18 + esbuild-android-arm64: 0.15.18 + esbuild-darwin-64: 0.15.18 + esbuild-darwin-arm64: 0.15.18 + esbuild-freebsd-64: 0.15.18 + esbuild-freebsd-arm64: 0.15.18 + esbuild-linux-32: 0.15.18 + esbuild-linux-64: 0.15.18 + esbuild-linux-arm: 0.15.18 + esbuild-linux-arm64: 0.15.18 + esbuild-linux-mips64le: 0.15.18 + esbuild-linux-ppc64le: 0.15.18 + esbuild-linux-riscv64: 0.15.18 + esbuild-linux-s390x: 0.15.18 + esbuild-netbsd-64: 0.15.18 + esbuild-openbsd-64: 0.15.18 + esbuild-sunos-64: 0.15.18 + esbuild-windows-32: 0.15.18 + esbuild-windows-64: 0.15.18 + esbuild-windows-arm64: 0.15.18 + dev: true + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -699,6 +1273,14 @@ packages: estraverse: 5.3.0 dev: true + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + /eslint-utils@3.0.0(eslint@8.32.0): resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} @@ -719,6 +1301,11 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + /eslint@8.32.0: resolution: {integrity: sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -767,30 +1354,92 @@ packages: - supports-color dev: true - /espree@9.4.1: - resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} + /eslint@8.47.0: + resolution: {integrity: sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true dependencies: - acorn: 8.8.2 - acorn-jsx: 5.3.2(acorn@8.8.2) - eslint-visitor-keys: 3.3.0 - dev: true - - /esquery@1.4.0: - resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} - engines: {node: '>=0.10'} - dependencies: - estraverse: 5.3.0 - dev: true - - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - dependencies: - estraverse: 5.3.0 - dev: true - - /estraverse@4.3.0: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.47.0) + '@eslint-community/regexpp': 4.6.2 + '@eslint/eslintrc': 2.1.2 + '@eslint/js': 8.47.0 + '@humanwhocodes/config-array': 0.11.10 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.19.0 + graphemer: 1.4.0 + ignore: 5.2.4 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@9.4.1: + resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) + eslint-visitor-keys: 3.3.0 + dev: true + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) + eslint-visitor-keys: 3.4.3 + dev: true + + /esquery@1.4.0: + resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@4.3.0: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} engines: {node: '>=4.0'} dev: true @@ -891,6 +1540,14 @@ packages: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true + /foreground-child@2.0.0: + resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} + engines: {node: '>=8.0.0'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 3.0.7 + dev: true + /fs-extra@8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} @@ -904,6 +1561,34 @@ packages: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true + /fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind@1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true + + /gen-esm-wrapper@1.1.3: + resolution: {integrity: sha512-LNHZ+QpaCW/0VhABIbXn45V+P8kFvjjwuue9hbV23eOjuFVz6c0FE3z1XpLX9pSjLW7UmtCkXo5F9vhZWVs8oQ==} + hasBin: true + dependencies: + is-valid-identifier: 2.0.2 + dev: true + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /get-func-name@2.0.0: + resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} + dev: true + /get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -964,11 +1649,22 @@ packages: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} dev: true + /has@1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + /hex-to-rgba@2.0.1: resolution: {integrity: sha512-5XqPJBpsEUMsseJUi2w2Hl7cHFFi3+OO10M2pzAvKB1zL6fc+koGMhmBqoDOCB4GemiRM/zvDMRIhVw6EkB8dQ==} dev: false @@ -978,6 +1674,10 @@ packages: engines: {node: '>=12.0.0'} dev: false + /html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: true + /human-signals@1.1.1: resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} engines: {node: '>=8.12.0'} @@ -1014,15 +1714,30 @@ packages: wrappy: 1.0.2 dev: true + /inherits@2.0.1: + resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} + dev: true + /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true + /is-core-module@2.13.0: + resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + dependencies: + has: 1.0.3 + dev: true + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} dev: true + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -1045,10 +1760,38 @@ packages: engines: {node: '>=8'} dev: true + /is-valid-identifier@2.0.2: + resolution: {integrity: sha512-mpS5EGqXOwzXtKAg6I44jIAqeBfntFLxpAth1rrKbxtKyI6LPktyDYpHBI+tHlduhhX/SF26mFXmxQu995QVqg==} + dependencies: + assert: 1.5.0 + dev: true + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true + /istanbul-lib-coverage@3.2.0: + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + engines: {node: '>=8'} + dev: true + + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + dependencies: + istanbul-lib-coverage: 3.2.0 + make-dir: 4.0.0 + supports-color: 7.2.0 + dev: true + + /istanbul-reports@3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + dev: true + /js-sdsl@4.3.0: resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==} dev: true @@ -1072,6 +1815,10 @@ packages: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true + /jsonc-parser@3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + dev: true + /jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: @@ -1094,6 +1841,11 @@ packages: type-check: 0.4.0 dev: true + /local-pkg@0.4.3: + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} + engines: {node: '>=14'} + dev: true + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -1127,6 +1879,12 @@ packages: js-tokens: 4.0.0 dev: false + /loupe@2.3.6: + resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} + dependencies: + get-func-name: 2.0.0 + dev: true + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -1138,6 +1896,20 @@ packages: resolution: {integrity: sha512-bpRmwbRHqongRhA+mXzbLWjVy7ylqmfMBYaQkSs6pac0z6hBTvsgrH0r4FBYd/UYVJBmS6Rp/O+oCCQVLzKV1g==} dev: true + /magic-string@0.30.2: + resolution: {integrity: sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + dependencies: + semver: 7.5.4 + dev: true + /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true @@ -1170,6 +1942,15 @@ packages: brace-expansion: 1.1.11 dev: true + /mlly@1.4.0: + resolution: {integrity: sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==} + dependencies: + acorn: 8.10.0 + pathe: 1.1.1 + pkg-types: 1.0.3 + ufo: 1.2.0 + dev: true + /mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -1190,6 +1971,12 @@ packages: minimatch: 3.1.2 dev: true + /nanoid@3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + /natural-compare-lite@1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} dev: true @@ -1205,6 +1992,11 @@ packages: path-key: 3.1.1 dev: true + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -1230,6 +2022,18 @@ packages: word-wrap: 1.2.3 dev: true + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -1244,6 +2048,13 @@ packages: yocto-queue: 0.1.0 dev: true + /p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + yocto-queue: 1.0.0 + dev: true + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -1285,16 +2096,49 @@ packages: engines: {node: '>=8'} dev: true + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} dev: true + /pathe@1.1.1: + resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} + dev: true + + /pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} dev: true + /pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + dependencies: + jsonc-parser: 3.2.0 + mlly: 1.4.0 + pathe: 1.1.1 + dev: true + + /postcss@8.4.27: + resolution: {integrity: sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -1306,6 +2150,15 @@ packages: hasBin: true dev: true + /pretty-format@29.6.2: + resolution: {integrity: sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.0 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: true + /pretty-quick@3.1.3(prettier@2.8.3): resolution: {integrity: sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA==} engines: {node: '>=10.13'} @@ -1348,6 +2201,10 @@ packages: scheduler: 0.23.0 dev: false + /react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + dev: true + /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} @@ -1360,11 +2217,35 @@ packages: engines: {node: '>=8'} dev: true + /replace-in-file@6.3.5: + resolution: {integrity: sha512-arB9d3ENdKva2fxRnSjwBEXfK1npgyci7ZZuwysgAp7ORjHSyxz6oqIjTEv8R0Ydl4Ll7uOAZXL4vbkhGIizCg==} + engines: {node: '>=10'} + hasBin: true + dependencies: + chalk: 4.1.2 + glob: 7.2.3 + yargs: 17.7.2 + dev: true + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} dev: true + /resolve@1.22.4: + resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} + hasBin: true + dependencies: + is-core-module: 2.13.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -1377,6 +2258,14 @@ packages: glob: 7.2.3 dev: true + /rollup@2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -1389,8 +2278,8 @@ packages: loose-envify: 1.4.0 dev: false - /semver@7.3.8: - resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} hasBin: true dependencies: @@ -1409,6 +2298,10 @@ packages: engines: {node: '>=8'} dev: true + /siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + dev: true + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true @@ -1424,10 +2317,32 @@ packages: engines: {node: '>=8'} dev: true + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + + /stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + dev: true + + /std-env@3.3.3: + resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} + dev: true + /streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -1445,6 +2360,18 @@ packages: engines: {node: '>=8'} dev: true + /strip-literal@0.4.2: + resolution: {integrity: sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==} + dependencies: + acorn: 8.10.0 + dev: true + + /strip-literal@1.3.0: + resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} + dependencies: + acorn: 8.10.0 + dev: true + /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -1452,10 +2379,48 @@ packages: has-flag: 4.0.0 dev: true + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + dev: true + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true + /tinybench@2.5.0: + resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==} + dev: true + + /tinypool@0.3.1: + resolution: {integrity: sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==} + engines: {node: '>=14.0.0'} + dev: true + + /tinypool@0.7.0: + resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} + engines: {node: '>=14.0.0'} + dev: true + + /tinyspy@1.1.1: + resolution: {integrity: sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g==} + engines: {node: '>=14.0.0'} + dev: true + + /tinyspy@2.1.1: + resolution: {integrity: sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==} + engines: {node: '>=14.0.0'} + dev: true + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -1467,6 +2432,37 @@ packages: resolution: {integrity: sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==} dev: true + /ts-node@10.9.1(@types/node@18.11.18)(typescript@4.8.2): + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.3 + '@types/node': 18.11.18 + acorn: 8.10.0 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.8.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + /ts-node@10.9.1(@types/node@18.11.18)(typescript@5.1.6): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true @@ -1487,7 +2483,7 @@ packages: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 '@types/node': 18.11.18 - acorn: 8.8.2 + acorn: 8.10.0 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 @@ -1504,11 +2500,9 @@ packages: /tslib@2.4.1: resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} - dev: false /tslib@2.6.1: resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} - dev: true /tsutils@3.21.0(typescript@5.1.6): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} @@ -1540,17 +2534,32 @@ packages: prelude-ls: 1.2.1 dev: true + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} dev: true + /typescript@4.8.2: + resolution: {integrity: sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + /typescript@5.1.6: resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} engines: {node: '>=14.17'} hasBin: true dev: true + /ufo@1.2.0: + resolution: {integrity: sha512-RsPyTbqORDNDxqAdQPQBpgqhWle1VcTSou/FraClYlHf6TZnQcGslpLcAphNR+sQW4q5lLWLbOsRlh9j24baQg==} + dev: true + /undici@5.21.0: resolution: {integrity: sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==} engines: {node: '>=12.18'} @@ -1576,10 +2585,186 @@ packages: punycode: 2.3.0 dev: true + /util@0.10.3: + resolution: {integrity: sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==} + dependencies: + inherits: 2.0.1 + dev: true + /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true + /v8-to-istanbul@9.1.0: + resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} + engines: {node: '>=10.12.0'} + dependencies: + '@jridgewell/trace-mapping': 0.3.19 + '@types/istanbul-lib-coverage': 2.0.4 + convert-source-map: 1.9.0 + dev: true + + /vite-node@0.34.1(@types/node@18.11.18): + resolution: {integrity: sha512-odAZAL9xFMuAg8aWd7nSPT+hU8u2r9gU3LRm9QKjxBEF2rRdWpMuqkrkjvyVQEdNFiBctqr2Gg4uJYizm5Le6w==} + engines: {node: '>=v14.18.0'} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4 + mlly: 1.4.0 + pathe: 1.1.1 + picocolors: 1.0.0 + vite: 3.2.7(@types/node@18.11.18) + transitivePeerDependencies: + - '@types/node' + - less + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vite@3.2.7(@types/node@18.11.18): + resolution: {integrity: sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 18.11.18 + esbuild: 0.15.18 + postcss: 8.4.27 + resolve: 1.22.4 + rollup: 2.79.1 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /vitest@0.23.4: + resolution: {integrity: sha512-iukBNWqQAv8EKDBUNntspLp9SfpaVFbmzmM0sNcnTxASQZMzRw3PsM6DMlsHiI+I6GeO5/sYDg3ecpC+SNFLrQ==} + engines: {node: '>=v14.16.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + dependencies: + '@types/chai': 4.3.5 + '@types/chai-subset': 1.3.3 + '@types/node': 18.11.18 + chai: 4.3.7 + debug: 4.3.4 + local-pkg: 0.4.3 + strip-literal: 0.4.2 + tinybench: 2.5.0 + tinypool: 0.3.1 + tinyspy: 1.1.1 + vite: 3.2.7(@types/node@18.11.18) + transitivePeerDependencies: + - less + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vitest@0.34.1: + resolution: {integrity: sha512-G1PzuBEq9A75XSU88yO5G4vPT20UovbC/2osB2KEuV/FisSIIsw7m5y2xMdB7RsAGHAfg2lPmp2qKr3KWliVlQ==} + engines: {node: '>=v14.18.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + playwright: '*' + safaridriver: '*' + webdriverio: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + dependencies: + '@types/chai': 4.3.5 + '@types/chai-subset': 1.3.3 + '@types/node': 18.11.18 + '@vitest/expect': 0.34.1 + '@vitest/runner': 0.34.1 + '@vitest/snapshot': 0.34.1 + '@vitest/spy': 0.34.1 + '@vitest/utils': 0.34.1 + acorn: 8.10.0 + acorn-walk: 8.2.0 + cac: 6.7.14 + chai: 4.3.7 + debug: 4.3.4 + local-pkg: 0.4.3 + magic-string: 0.30.2 + pathe: 1.1.1 + picocolors: 1.0.0 + std-env: 3.3.3 + strip-literal: 1.3.0 + tinybench: 2.5.0 + tinypool: 0.7.0 + vite: 3.2.7(@types/node@18.11.18) + vite-node: 0.34.1(@types/node@18.11.18) + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -1588,11 +2773,29 @@ packages: isexe: 2.0.0 dev: true + /why-is-node-running@2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + dev: true + /word-wrap@1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true @@ -1610,10 +2813,51 @@ packages: optional: true dev: true + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true + /yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + dev: true + + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + + /yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + dev: true + + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: true + /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} @@ -1623,3 +2867,8 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true + + /yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: true diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json index e5b1fc3..1735f11 100644 --- a/tsconfig.eslint.json +++ b/tsconfig.eslint.json @@ -4,5 +4,18 @@ "noEmit": true, "skipLibCheck": true }, - "include": ["src", "tests", "tsup.config.ts"] + "include": [ + "**/*.ts", + "**/*.tsx", + "**/*.js", + "**/*.mjs", + "**/*.jsx", + "**/*.test.ts", + "**/*.test.js", + "**/*.test.mjs", + "**/*.spec.ts", + "**/*.spec.js", + "**/*.spec.mjs" + ], + "exclude": [] } diff --git a/tsconfig.json b/tsconfig.json index 4163a05..1fff1c3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { - "target": "es2017", - "lib": ["dom", "dom.iterable", "esnext"], + "target": "es2021", + "lib": ["esnext"], "strict": true, "forceConsistentCasingInFileNames": true, "esModuleInterop": true, @@ -25,7 +25,5 @@ "incremental": true, "declaration": true, "skipLibCheck": true - }, - "include": ["src"], - "exclude": ["node_modules"] + } }