kf-chat-sdk 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/.storybook/global.css +0 -0
  2. package/.storybook/logo.png +0 -0
  3. package/.storybook/main.ts +17 -0
  4. package/.storybook/manager.ts +14 -0
  5. package/.storybook/preview-head.html +1 -0
  6. package/.storybook/preview.ts +22 -0
  7. package/.storybook/public/favicon.ico +0 -0
  8. package/.storybook/vitest.setup.ts +7 -0
  9. package/README.md +67 -0
  10. package/dist/kf-chat-sdk.cjs.js +2 -0
  11. package/dist/kf-chat-sdk.es.js +210 -0
  12. package/dist/kf-chat-sdk.iife.js +2 -0
  13. package/dist/kf-chat-sdk.umd.js +2 -0
  14. package/dist/src/ai-chat.d.ts +19 -0
  15. package/dist/src/index.d.ts +6 -0
  16. package/dist/src/stories/Config.stories.d.ts +105 -0
  17. package/dist/src/types.d.ts +26 -0
  18. package/dist/src/utils.d.ts +6 -0
  19. package/dist/vite.svg +1 -0
  20. package/example/test.html +34 -0
  21. package/package.json +47 -0
  22. package/public/vite.svg +1 -0
  23. package/src/ai-chat.scss +92 -0
  24. package/src/ai-chat.ts +180 -0
  25. package/src/assets/chatlogo.png +0 -0
  26. package/src/assets/rebotframes.png +0 -0
  27. package/src/assets/rebotframes.png.zip +0 -0
  28. package/src/index.ts +13 -0
  29. package/src/stories/01-QuickStart.mdx +61 -0
  30. package/src/stories/02-KfAiChatInstance.mdx +60 -0
  31. package/src/stories/Config.stories.ts +419 -0
  32. package/src/stories/assets/accessibility.png +0 -0
  33. package/src/stories/assets/accessibility.svg +1 -0
  34. package/src/stories/assets/addon-library.png +0 -0
  35. package/src/stories/assets/assets.png +0 -0
  36. package/src/stories/assets/avif-test-image.avif +0 -0
  37. package/src/stories/assets/context.png +0 -0
  38. package/src/stories/assets/discord.svg +1 -0
  39. package/src/stories/assets/docs.png +0 -0
  40. package/src/stories/assets/figma-plugin.png +0 -0
  41. package/src/stories/assets/github.svg +1 -0
  42. package/src/stories/assets/share.png +0 -0
  43. package/src/stories/assets/styling.png +0 -0
  44. package/src/stories/assets/testing.png +0 -0
  45. package/src/stories/assets/theming.png +0 -0
  46. package/src/stories/assets/tutorials.svg +1 -0
  47. package/src/stories/assets/youtube.svg +1 -0
  48. package/src/stories/test.js +6 -0
  49. package/src/style.css +96 -0
  50. package/src/types.ts +28 -0
  51. package/src/typescript.svg +1 -0
  52. package/src/utils.ts +22 -0
  53. package/storybook-static/addon-visual-tests-assets/visual-test-illustration.mp4 +0 -0
  54. package/storybook-static/assets/01-QuickStart-B5SD5CD3.js +47 -0
  55. package/storybook-static/assets/02-KfAiChatInstance-C4aIC-m_.js +45 -0
  56. package/storybook-static/assets/Color-ASIRERSW-DTVqMCUO.js +1 -0
  57. package/storybook-static/assets/Config.stories-C4cl_xx1.js +334 -0
  58. package/storybook-static/assets/DocsRenderer-GHJI37HO-T8mt1n5r.js +10 -0
  59. package/storybook-static/assets/WithTooltip-IO6J4KBT-B70Ikd3l.js +9 -0
  60. package/storybook-static/assets/_commonjsHelpers-CqkleIqs.js +1 -0
  61. package/storybook-static/assets/axe-C1vtPvrb.js +20 -0
  62. package/storybook-static/assets/blocks-Cd8GYnjc.js +750 -0
  63. package/storybook-static/assets/formatter-QJ4M4OGQ-cj5x2rLy.js +1 -0
  64. package/storybook-static/assets/iframe-D_e5PX1O.js +1024 -0
  65. package/storybook-static/assets/index-CNTZSS8S.js +1 -0
  66. package/storybook-static/assets/matchers-DMFSMG2O-8XxnESUZ.js +14 -0
  67. package/storybook-static/assets/preload-helper-BDBacUwf.js +1 -0
  68. package/storybook-static/assets/syntaxhighlighter-IQDEPFLK-D60nBfBQ.js +6 -0
  69. package/storybook-static/favicon-wrapper.svg +46 -0
  70. package/storybook-static/favicon.ico +0 -0
  71. package/storybook-static/favicon.svg +1 -0
  72. package/storybook-static/iframe.html +687 -0
  73. package/storybook-static/index.html +155 -0
  74. package/storybook-static/index.json +1 -0
  75. package/storybook-static/nunito-sans-bold-italic.woff2 +0 -0
  76. package/storybook-static/nunito-sans-bold.woff2 +0 -0
  77. package/storybook-static/nunito-sans-italic.woff2 +0 -0
  78. package/storybook-static/nunito-sans-regular.woff2 +0 -0
  79. package/storybook-static/project.json +1 -0
  80. package/storybook-static/sb-addons/a11y-3/manager-bundle.js +5 -0
  81. package/storybook-static/sb-addons/chromatic-com-storybook-1/manager-bundle.js +352 -0
  82. package/storybook-static/sb-addons/chromatic-com-storybook-1/manager-bundle.js.LEGAL.txt +40 -0
  83. package/storybook-static/sb-addons/docs-4/manager-bundle.js +3 -0
  84. package/storybook-static/sb-addons/storybook-5/manager-bundle.js +3 -0
  85. package/storybook-static/sb-addons/storybook-core-server-presets-0/common-manager-bundle.js +628 -0
  86. package/storybook-static/sb-addons/vitest-2/manager-bundle.js +3 -0
  87. package/storybook-static/sb-common-assets/favicon-wrapper.svg +46 -0
  88. package/storybook-static/sb-common-assets/favicon.svg +1 -0
  89. package/storybook-static/sb-common-assets/nunito-sans-bold-italic.woff2 +0 -0
  90. package/storybook-static/sb-common-assets/nunito-sans-bold.woff2 +0 -0
  91. package/storybook-static/sb-common-assets/nunito-sans-italic.woff2 +0 -0
  92. package/storybook-static/sb-common-assets/nunito-sans-regular.woff2 +0 -0
  93. package/storybook-static/sb-manager/globals-runtime.js +75605 -0
  94. package/storybook-static/sb-manager/globals.js +24 -0
  95. package/storybook-static/sb-manager/manager-stores.js +23 -0
  96. package/storybook-static/sb-manager/runtime.js +19713 -0
  97. package/storybook-static/src/ai-chat.d.ts +19 -0
  98. package/storybook-static/src/index.d.ts +6 -0
  99. package/storybook-static/src/stories/Config.stories.d.ts +105 -0
  100. package/storybook-static/src/types.d.ts +26 -0
  101. package/storybook-static/src/utils.d.ts +6 -0
  102. package/storybook-static/vite-inject-mocker-entry.js +2 -0
  103. package/storybook-static/vite.svg +1 -0
  104. package/tsconfig.json +26 -0
  105. package/vite.config.ts +60 -0
  106. package/vitest.shims.d.ts +1 -0
@@ -0,0 +1,19 @@
1
+ import { ConfigOpitons, UpdateOptions } from './types';
2
+ export declare class KfAiChat {
3
+ private options;
4
+ private containerEl;
5
+ private entryEl;
6
+ private dialogEl;
7
+ private dialogIframeEl;
8
+ constructor(options: ConfigOpitons);
9
+ private showEntry;
10
+ private changeEntrySize;
11
+ private changeDialogWidth;
12
+ private changeEntryPosition;
13
+ private changeDialogPosition;
14
+ init(): void;
15
+ update(options: UpdateOptions): void;
16
+ show(): void;
17
+ hide(): void;
18
+ destroy(): void;
19
+ }
@@ -0,0 +1,6 @@
1
+ import { KfAiChat } from './ai-chat';
2
+ export * from './ai-chat';
3
+ declare const _default: {
4
+ KfAiChat: typeof KfAiChat;
5
+ };
6
+ export default _default;
@@ -0,0 +1,105 @@
1
+ import { StoryObj } from '@storybook/html-vite';
2
+ import { ConfigOpitons } from '../types';
3
+ declare const meta: {
4
+ title: string;
5
+ tags: string[];
6
+ render: (args: ConfigOpitons, content: import('storybook/internal/csf').StoryContext<import('@storybook/html').HtmlRenderer, ConfigOpitons>) => HTMLDivElement;
7
+ argTypes: {
8
+ service: {
9
+ description: string;
10
+ default: string;
11
+ required: boolean;
12
+ control: "text";
13
+ };
14
+ appCode: {
15
+ description: string;
16
+ required: boolean;
17
+ control: "text";
18
+ };
19
+ appendTo: {
20
+ control: false;
21
+ description: string;
22
+ required: boolean;
23
+ table: {
24
+ category: string;
25
+ defaultValue: {
26
+ summary: string;
27
+ };
28
+ type: {
29
+ summary: string;
30
+ };
31
+ };
32
+ };
33
+ zIndex: {
34
+ description: string;
35
+ default: number;
36
+ defaultValue: number;
37
+ required: boolean;
38
+ control: "number";
39
+ };
40
+ showEntry: {
41
+ description: string;
42
+ defaultValue: boolean;
43
+ required: boolean;
44
+ control: "boolean";
45
+ };
46
+ entrySize: {
47
+ control: {
48
+ type: "select";
49
+ };
50
+ options: string[];
51
+ };
52
+ entryX: {
53
+ description: string;
54
+ default: number;
55
+ defaultValue: number;
56
+ required: boolean;
57
+ control: "number";
58
+ };
59
+ entryY: {
60
+ description: string;
61
+ default: number;
62
+ defaultValue: number;
63
+ required: boolean;
64
+ control: "number";
65
+ };
66
+ dialogWidth: {
67
+ description: string;
68
+ default: number;
69
+ defaultValue: number;
70
+ required: boolean;
71
+ control: "number";
72
+ };
73
+ dialogPosition: {
74
+ description: string;
75
+ defaultValue: string;
76
+ required: boolean;
77
+ control: {
78
+ type: "select";
79
+ };
80
+ options: string[];
81
+ };
82
+ };
83
+ args: {
84
+ service: string;
85
+ appCode: string;
86
+ showEntry: true;
87
+ entrySize: "medium";
88
+ entryX: number;
89
+ entryY: number;
90
+ dialogWidth: number;
91
+ dialogPosition: "right";
92
+ zIndex: number;
93
+ };
94
+ };
95
+ export default meta;
96
+ type Story = StoryObj<ConfigOpitons>;
97
+ export declare const DefaultConfig: Story;
98
+ export declare const ServiceApp: Story;
99
+ export declare const ShowEntry: Story;
100
+ export declare const EntrySmallSize: Story;
101
+ export declare const EntryMediumSize: Story;
102
+ export declare const EntryLargeSize: Story;
103
+ export declare const EntryPosition: Story;
104
+ export declare const DialogPosition: Story;
105
+ export declare const DialogWidth: Story;
@@ -0,0 +1,26 @@
1
+ export interface Config {
2
+ service: string;
3
+ appCode: string;
4
+ appendTo: HTMLElement | null;
5
+ zIndex: number;
6
+ showEntry: boolean;
7
+ entrySize: 'small' | 'medium' | 'large';
8
+ entryX: number;
9
+ entryY: number;
10
+ dialogWidth: number;
11
+ dialogPosition: 'right' | 'left';
12
+ }
13
+ export interface UpdateOptions {
14
+ service?: string;
15
+ appCode?: string;
16
+ zIndex?: number;
17
+ showEntry?: boolean;
18
+ entrySize?: 'small' | 'medium' | 'large';
19
+ entryX?: number;
20
+ entryY?: number;
21
+ dialogWidth?: number;
22
+ dialogPosition?: 'right' | 'left';
23
+ }
24
+ export type ConfigOpitons = UpdateOptions & {
25
+ appendTo?: HTMLElement | null;
26
+ };
@@ -0,0 +1,6 @@
1
+ export declare class ConfigManager<T> {
2
+ private defaults;
3
+ constructor(defaults: T);
4
+ merge(userConfig?: Record<string, any>): T;
5
+ private deepMerge;
6
+ }
@@ -0,0 +1,2 @@
1
+ var ke=Object.defineProperty,Se=Object.defineProperties;var _e=Object.getOwnPropertyDescriptors;var Z=Object.getOwnPropertySymbols;var Ee=Object.prototype.hasOwnProperty,be=Object.prototype.propertyIsEnumerable;var U=(r,e,t)=>e in r?ke(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,G=(r,e)=>{for(var t in e||(e={}))Ee.call(e,t)&&U(r,t,e[t]);if(Z)for(var t of Z(e))be.call(e,t)&&U(r,t,e[t]);return r},Q=(r,e)=>Se(r,_e(e));var x=(r,e,t)=>U(r,typeof e!="symbol"?e+"":e,t);import{_ as Ie}from"./assets/preload-helper-BDBacUwf.js";class fe{constructor(){x(this,"registryByUrl",new Map);x(this,"registryById",new Map)}clear(){this.registryByUrl.clear(),this.registryById.clear()}keys(){return this.registryByUrl.keys()}add(e){this.registryByUrl.set(e.url,e),this.registryById.set(e.id,e)}register(e,t,n,i,s){const a=typeof e=="object"?e.type:e;if(typeof e=="object"){const o=e;if(o instanceof F||o instanceof C||o instanceof D||o instanceof N)throw new TypeError(`[vitest] Cannot register a mock that is already defined. Expected a JSON representation from \`MockedModule.toJSON\`, instead got "${o.type}". Use "registry.add()" to update a mock instead.`);if(o.type==="automock"){const l=F.fromJSON(o);return this.add(l),l}else if(o.type==="autospy"){const l=C.fromJSON(o);return this.add(l),l}else if(o.type==="redirect"){const l=N.fromJSON(o);return this.add(l),l}else throw o.type==="manual"?new Error("Cannot set serialized manual mock. Define a factory function manually with `ManualMockedModule.fromJSON()`."):new Error(`Unknown mock type: ${o.type}`)}if(typeof t!="string")throw new TypeError("[vitest] Mocks require a raw string.");if(typeof i!="string")throw new TypeError("[vitest] Mocks require a url string.");if(typeof n!="string")throw new TypeError("[vitest] Mocks require an id string.");if(a==="manual"){if(typeof s!="function")throw new TypeError("[vitest] Manual mocks require a factory function.");const o=new D(t,n,i,s);return this.add(o),o}else if(a==="automock"||a==="autospy"){const o=a==="automock"?new F(t,n,i):new C(t,n,i);return this.add(o),o}else if(a==="redirect"){if(typeof s!="string")throw new TypeError("[vitest] Redirect mocks require a redirect string.");const o=new N(t,n,i,s);return this.add(o),o}else throw new Error(`[vitest] Unknown mock type: ${a}`)}delete(e){this.registryByUrl.delete(e)}get(e){return this.registryByUrl.get(e)}getById(e){return this.registryById.get(e)}has(e){return this.registryByUrl.has(e)}}class F{constructor(e,t,n){x(this,"type","automock");this.raw=e,this.id=t,this.url=n}static fromJSON(e){return new C(e.raw,e.id,e.url)}toJSON(){return{type:this.type,url:this.url,raw:this.raw,id:this.id}}}class C{constructor(e,t,n){x(this,"type","autospy");this.raw=e,this.id=t,this.url=n}static fromJSON(e){return new C(e.raw,e.id,e.url)}toJSON(){return{type:this.type,url:this.url,id:this.id,raw:this.raw}}}class N{constructor(e,t,n,i){x(this,"type","redirect");this.raw=e,this.id=t,this.url=n,this.redirect=i}static fromJSON(e){return new N(e.raw,e.id,e.url,e.redirect)}toJSON(){return{type:this.type,url:this.url,raw:this.raw,id:this.id,redirect:this.redirect}}}class D{constructor(e,t,n,i){x(this,"cache");x(this,"type","manual");this.raw=e,this.id=t,this.url=n,this.factory=i}async resolve(){if(this.cache)return this.cache;let e;try{e=await this.factory()}catch(t){const n=new Error('[vitest] There was an error when mocking a module. If you are using "vi.mock" factory, make sure there are no top level variables inside, since this call is hoisted to top of the file. Read more: https://vitest.dev/api/vi.html#vi-mock');throw n.cause=t,n}if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError(`[vitest] vi.mock("${this.raw}", factory?: () => unknown) is not returning an object. Did you mean to return an object with a "default" key?`);return this.cache=e}static fromJSON(e,t){return new D(e.raw,e.id,e.url,t)}toJSON(){return{type:this.type,url:this.url,id:this.id,raw:this.raw}}}function xe(r,e,t={}){const n=new Array,i=new Te,s=(l,d,h)=>{try{return l[d]=h,!0}catch(y){return!1}},a=(l,d)=>{const h=z(l),y=h==="Module"||!!l.__esModule;for(const{key:w,descriptor:b}of ee(l,y,r.globalConstructors)){if(!y&&b.get){try{Object.defineProperty(d,w,b)}catch(R){}continue}if($e(w,h))continue;const g=l[w],c=i.getId(g);if(c!==void 0){n.push(()=>s(d,w,i.getMockedValue(c)));continue}const u=z(g);if(Array.isArray(g)){s(d,w,[]);continue}const T=u.includes("Function")&&typeof g=="function";if((!T||g._isMockFunction)&&u!=="Object"&&u!=="Module"){s(d,w,g);continue}if(s(d,w,T?g:{})){if(T){let _=function(){if(this instanceof d[w])for(const{key:I,descriptor:A}of ee(this,!1,r.globalConstructors)){if(A.get)continue;const L=this[I];if(z(L).includes("Function")&&typeof L=="function"){const J=this[I],f=R(this,I).mockImplementation(J),P=f.mockReset;f.mockRestore=f.mockReset=()=>(P.call(f),f.mockImplementation(J),f)}}};if(!r.spyOn)throw new Error("[@vitest/mocker] `spyOn` is not defined. This is a Vitest error. Please open a new issue with reproduction.");const R=r.spyOn,M=R(d,w);if(r.type==="automock"){M.mockImplementation(_);const I=M.mockReset;M.mockRestore=M.mockReset=()=>(I.call(M),M.mockImplementation(_),M)}Object.defineProperty(d[w],"length",{value:0})}i.track(g,d[w]),a(g,d[w])}}},o=t;a(e,o);for(const l of n)l();return o}class Te{constructor(){x(this,"idMap",new Map);x(this,"mockedValueMap",new Map)}getId(e){return this.idMap.get(e)}getMockedValue(e){return this.mockedValueMap.get(e)}track(e,t){const n=this.idMap.size;return this.idMap.set(e,n),this.mockedValueMap.set(n,t),n}}function z(r){return Object.prototype.toString.apply(r).slice(8,-1)}function $e(r,e){return e.includes("Function")&&typeof r=="string"&&["arguments","callee","caller","length","name"].includes(r)}function ee(r,e,t){const{Map:n,Object:i,Function:s,RegExp:a,Array:o}=t,l=new n;let d=r;do{if(d===i.prototype||d===s.prototype||d===a.prototype)break;Pe(d,h=>{const y=i.getOwnPropertyDescriptor(d,h);y&&l.set(h,{key:h,descriptor:y})})}while(d=i.getPrototypeOf(d));if(e&&!l.has("default")&&"default"in r){const h=i.getOwnPropertyDescriptor(r,"default");h&&l.set("default",{key:"default",descriptor:h})}return o.from(l.values())}function Pe(r,e){const t=typeof e=="function"?e:n=>e.add(n);Object.getOwnPropertyNames(r).forEach(t),Object.getOwnPropertySymbols(r).forEach(t)}const Me=/^[A-Za-z]:\//;function de(r=""){return r&&r.replace(/\\/g,"/").replace(Me,e=>e.toUpperCase())}const Re=/^[/\\]{2}/,Ae=/^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/,Oe=/^[A-Za-z]:$/,Ce=/.(\.[^./]+|\.)$/,Ne=function(r){if(r.length===0)return".";r=de(r);const e=r.match(Re),t=te(r),n=r[r.length-1]==="/";return r=Je(r,!t),r.length===0?t?"/":n?"./":".":(n&&(r+="/"),Oe.test(r)&&(r+="/"),e?t?`//${r}`:`//./${r}`:t&&!te(r)?`/${r}`:r)},Le=function(...r){let e="";for(const t of r)if(t)if(e.length>0){const n=e[e.length-1]==="/",i=t[0]==="/";n&&i?e+=t.slice(1):e+=n||i?t:`/${t}`}else e+=t;return Ne(e)};function Je(r,e){let t="",n=0,i=-1,s=0,a=null;for(let o=0;o<=r.length;++o){if(o<r.length)a=r[o];else{if(a==="/")break;a="/"}if(a==="/"){if(!(i===o-1||s===1))if(s===2){if(t.length<2||n!==2||t[t.length-1]!=="."||t[t.length-2]!=="."){if(t.length>2){const l=t.lastIndexOf("/");l===-1?(t="",n=0):(t=t.slice(0,l),n=t.length-1-t.lastIndexOf("/")),i=o,s=0;continue}else if(t.length>0){t="",n=0,i=o,s=0;continue}}e&&(t+=t.length>0?"/..":"..",n=2)}else t.length>0?t+=`/${r.slice(i+1,o)}`:t=r.slice(i+1,o),n=o-i-1;i=o,s=0}else a==="."&&s!==-1?++s:s=-1}return t}const te=function(r){return Ae.test(r)},Be=function(r){if(r==="..")return"";const e=Ce.exec(de(r));return e&&e[1]||""};var Xe={reset:[0,0],bold:[1,22,"\x1B[22m\x1B[1m"],dim:[2,22,"\x1B[22m\x1B[2m"],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29],black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],gray:[90,39],bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]},qe=Object.entries(Xe);function K(r){return String(r)}K.open="";K.close="";function Fe(r=!1){let e=typeof process!="undefined"?process:void 0,t=(e==null?void 0:e.env)||{},n=(e==null?void 0:e.argv)||[];return!("NO_COLOR"in t||n.includes("--no-color"))&&("FORCE_COLOR"in t||n.includes("--color")||(e==null?void 0:e.platform)==="win32"||r&&t.TERM!=="dumb"||"CI"in t)||typeof window!="undefined"&&!!window.chrome}function De(r=!1){let e=Fe(r),t=(a,o,l,d)=>{let h="",y=0;do h+=a.substring(y,d)+l,y=d+o.length,d=a.indexOf(o,y);while(~d);return h+a.substring(y)},n=(a,o,l=a)=>{let d=h=>{let y=String(h),w=y.indexOf(o,a.length);return~w?a+t(y,o,l,w)+o:a+y+o};return d.open=a,d.close=o,d},i={isColorSupported:e},s=a=>`\x1B[${a}m`;for(let[a,o]of qe)i[a]=e?n(s(o[0]),s(o[1]),o[2]):K;return i}De();function pe(r,e){return e.forEach(function(t){t&&typeof t!="string"&&!Array.isArray(t)&&Object.keys(t).forEach(function(n){if(n!=="default"&&!(n in r)){var i=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(r,n,i.get?i:{enumerable:!0,get:function(){return t[n]}})}})}),Object.freeze(r)}function he(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}var V={exports:{}},k={};var re;function Ue(){if(re)return k;re=1;var r=Symbol.for("react.transitional.element"),e=Symbol.for("react.portal"),t=Symbol.for("react.fragment"),n=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.consumer"),a=Symbol.for("react.context"),o=Symbol.for("react.forward_ref"),l=Symbol.for("react.suspense"),d=Symbol.for("react.suspense_list"),h=Symbol.for("react.memo"),y=Symbol.for("react.lazy"),w=Symbol.for("react.view_transition"),b=Symbol.for("react.client.reference");function g(c){if(typeof c=="object"&&c!==null){var u=c.$$typeof;switch(u){case r:switch(c=c.type,c){case t:case i:case n:case l:case d:case w:return c;default:switch(c=c&&c.$$typeof,c){case a:case o:case y:case h:return c;case s:return c;default:return u}}case e:return u}}}return k.ContextConsumer=s,k.ContextProvider=a,k.Element=r,k.ForwardRef=o,k.Fragment=t,k.Lazy=y,k.Memo=h,k.Portal=e,k.Profiler=i,k.StrictMode=n,k.Suspense=l,k.SuspenseList=d,k.isContextConsumer=function(c){return g(c)===s},k.isContextProvider=function(c){return g(c)===a},k.isElement=function(c){return typeof c=="object"&&c!==null&&c.$$typeof===r},k.isForwardRef=function(c){return g(c)===o},k.isFragment=function(c){return g(c)===t},k.isLazy=function(c){return g(c)===y},k.isMemo=function(c){return g(c)===h},k.isPortal=function(c){return g(c)===e},k.isProfiler=function(c){return g(c)===i},k.isStrictMode=function(c){return g(c)===n},k.isSuspense=function(c){return g(c)===l},k.isSuspenseList=function(c){return g(c)===d},k.isValidElementType=function(c){return typeof c=="string"||typeof c=="function"||c===t||c===i||c===n||c===l||c===d||typeof c=="object"&&c!==null&&(c.$$typeof===y||c.$$typeof===h||c.$$typeof===a||c.$$typeof===s||c.$$typeof===o||c.$$typeof===b||c.getModuleId!==void 0)},k.typeOf=g,k}var ne;function ze(){return ne||(ne=1,V.exports=Ue()),V.exports}var me=ze(),Ve=he(me),We=pe({__proto__:null,default:Ve},[me]),W={exports:{}},v={};var ie;function je(){if(ie)return v;ie=1;var r=Symbol.for("react.element"),e=Symbol.for("react.portal"),t=Symbol.for("react.fragment"),n=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),a=Symbol.for("react.context"),o=Symbol.for("react.server_context"),l=Symbol.for("react.forward_ref"),d=Symbol.for("react.suspense"),h=Symbol.for("react.suspense_list"),y=Symbol.for("react.memo"),w=Symbol.for("react.lazy"),b=Symbol.for("react.offscreen"),g;g=Symbol.for("react.module.reference");function c(u){if(typeof u=="object"&&u!==null){var T=u.$$typeof;switch(T){case r:switch(u=u.type,u){case t:case i:case n:case d:case h:return u;default:switch(u=u&&u.$$typeof,u){case o:case a:case l:case w:case y:case s:return u;default:return T}}case e:return T}}}return v.ContextConsumer=a,v.ContextProvider=s,v.Element=r,v.ForwardRef=l,v.Fragment=t,v.Lazy=w,v.Memo=y,v.Portal=e,v.Profiler=i,v.StrictMode=n,v.Suspense=d,v.SuspenseList=h,v.isAsyncMode=function(){return!1},v.isConcurrentMode=function(){return!1},v.isContextConsumer=function(u){return c(u)===a},v.isContextProvider=function(u){return c(u)===s},v.isElement=function(u){return typeof u=="object"&&u!==null&&u.$$typeof===r},v.isForwardRef=function(u){return c(u)===l},v.isFragment=function(u){return c(u)===t},v.isLazy=function(u){return c(u)===w},v.isMemo=function(u){return c(u)===y},v.isPortal=function(u){return c(u)===e},v.isProfiler=function(u){return c(u)===i},v.isStrictMode=function(u){return c(u)===n},v.isSuspense=function(u){return c(u)===d},v.isSuspenseList=function(u){return c(u)===h},v.isValidElementType=function(u){return typeof u=="string"||typeof u=="function"||u===t||u===i||u===n||u===d||u===h||u===b||typeof u=="object"&&u!==null&&(u.$$typeof===w||u.$$typeof===y||u.$$typeof===s||u.$$typeof===a||u.$$typeof===l||u.$$typeof===g||u.getModuleId!==void 0)},v.typeOf=c,v}var oe;function Ye(){return oe||(oe=1,W.exports=je()),W.exports}var ye=Ye(),Ke=he(ye),He=pe({__proto__:null,default:Ke},[ye]);const Ze=["isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isMemo","isPortal","isProfiler","isStrictMode","isSuspense","isSuspenseList","isValidElementType"];Object.fromEntries(Ze.map(r=>[r,e=>He[r](e)||We[r](e)]));let Ge=()=>"Promise{…}";try{const{getPromiseDetails:r,kPending:e,kRejected:t}=process.binding("util");Array.isArray(r(Promise.resolve()))&&(Ge=(n,i)=>{const[s,a]=r(n);return s===e?"Promise{<pending>}":`Promise${s===t?"!":""}{${i.inspect(a,i)}}`})}catch(r){}function Qe(r){const{message:e="$$stack trace error",stackTraceLimit:t=1}=r||{},n=Error.stackTraceLimit,i=Error.prepareStackTrace;Error.stackTraceLimit=t,Error.prepareStackTrace=o=>o.stack;const a=new Error(e).stack||"";return Error.prepareStackTrace=i,Error.stackTraceLimit=n,a}var j,se;function et(){if(se)return j;se=1;var r,e,t,n,i,s,a,o,l,d,h,y,w,b,g,c,u,T,R;return w=/\/(?![*\/])(?:\[(?:(?![\]\\]).|\\.)*\]|(?![\/\\]).|\\.)*(\/[$_\u200C\u200D\p{ID_Continue}]*|\\)?/uy,y=/--|\+\+|=>|\.{3}|\??\.(?!\d)|(?:&&|\|\||\?\?|[+\-%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2}|\/(?![\/*]))=?|[?~,:;[\](){}]/y,r=/(\x23?)(?=[$_\p{ID_Start}\\])(?:[$_\u200C\u200D\p{ID_Continue}]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+/uy,g=/(['"])(?:(?!\1)[^\\\n\r]|\\(?:\r\n|[^]))*(\1)?/y,h=/(?:0[xX][\da-fA-F](?:_?[\da-fA-F])*|0[oO][0-7](?:_?[0-7])*|0[bB][01](?:_?[01])*)n?|0n|[1-9](?:_?\d)*n|(?:(?:0(?!\d)|0\d*[89]\d*|[1-9](?:_?\d)*)(?:\.(?:\d(?:_?\d)*)?)?|\.\d(?:_?\d)*)(?:[eE][+-]?\d(?:_?\d)*)?|0[0-7]+/y,c=/[`}](?:[^`\\$]|\\[^]|\$(?!\{))*(`|\$\{)?/y,R=/[\t\v\f\ufeff\p{Zs}]+/uy,o=/\r?\n|[\r\u2028\u2029]/y,l=/\/\*(?:[^*]|\*(?!\/))*(\*\/)?/y,b=/\/\/.*/y,t=/[<>.:={}]|\/(?![\/*])/y,e=/[$_\p{ID_Start}][$_\u200C\u200D\p{ID_Continue}-]*/uy,n=/(['"])(?:(?!\1)[^])*(\1)?/y,i=/[^<>{}]+/y,T=/^(?:[\/+-]|\.{3}|\?(?:InterpolationIn(?:JSX|Template)|NoLineTerminatorHere|NonExpressionParenEnd|UnaryIncDec))?$|[{}([,;<>=*%&|^!~?:]$/,u=/^(?:=>|[;\]){}]|else|\?(?:NoLineTerminatorHere|NonExpressionParenEnd))?$/,s=/^(?:await|case|default|delete|do|else|instanceof|new|return|throw|typeof|void|yield)$/,a=/^(?:return|throw|yield)$/,d=RegExp(o.source),j=function*(_,{jsx:M=!1}={}){var I,A,L,p,m,J,f,P,H,$,B,S,X,E;for({length:J}=_,p=0,m="",E=[{tag:"JS"}],I=[],B=0,S=!1;p<J;){switch(P=E[E.length-1],P.tag){case"JS":case"JSNonExpressionParen":case"InterpolationInTemplate":case"InterpolationInJSX":if(_[p]==="/"&&(T.test(m)||s.test(m))&&(w.lastIndex=p,f=w.exec(_))){p=w.lastIndex,m=f[0],S=!0,yield{type:"RegularExpressionLiteral",value:f[0],closed:f[1]!==void 0&&f[1]!=="\\"};continue}if(y.lastIndex=p,f=y.exec(_)){switch(X=f[0],H=y.lastIndex,$=X,X){case"(":m==="?NonExpressionParenKeyword"&&E.push({tag:"JSNonExpressionParen",nesting:B}),B++,S=!1;break;case")":B--,S=!0,P.tag==="JSNonExpressionParen"&&B===P.nesting&&(E.pop(),$="?NonExpressionParenEnd",S=!1);break;case"{":y.lastIndex=0,L=!u.test(m)&&(T.test(m)||s.test(m)),I.push(L),S=!1;break;case"}":switch(P.tag){case"InterpolationInTemplate":if(I.length===P.nesting){c.lastIndex=p,f=c.exec(_),p=c.lastIndex,m=f[0],f[1]==="${"?(m="?InterpolationInTemplate",S=!1,yield{type:"TemplateMiddle",value:f[0]}):(E.pop(),S=!0,yield{type:"TemplateTail",value:f[0],closed:f[1]==="`"});continue}break;case"InterpolationInJSX":if(I.length===P.nesting){E.pop(),p+=1,m="}",yield{type:"JSXPunctuator",value:"}"};continue}}S=I.pop(),$=S?"?ExpressionBraceEnd":"}";break;case"]":S=!0;break;case"++":case"--":$=S?"?PostfixIncDec":"?UnaryIncDec";break;case"<":if(M&&(T.test(m)||s.test(m))){E.push({tag:"JSXTag"}),p+=1,m="<",yield{type:"JSXPunctuator",value:X};continue}S=!1;break;default:S=!1}p=H,m=$,yield{type:"Punctuator",value:X};continue}if(r.lastIndex=p,f=r.exec(_)){switch(p=r.lastIndex,$=f[0],f[0]){case"for":case"if":case"while":case"with":m!=="."&&m!=="?."&&($="?NonExpressionParenKeyword")}m=$,S=!s.test(f[0]),yield{type:f[1]==="#"?"PrivateIdentifier":"IdentifierName",value:f[0]};continue}if(g.lastIndex=p,f=g.exec(_)){p=g.lastIndex,m=f[0],S=!0,yield{type:"StringLiteral",value:f[0],closed:f[2]!==void 0};continue}if(h.lastIndex=p,f=h.exec(_)){p=h.lastIndex,m=f[0],S=!0,yield{type:"NumericLiteral",value:f[0]};continue}if(c.lastIndex=p,f=c.exec(_)){p=c.lastIndex,m=f[0],f[1]==="${"?(m="?InterpolationInTemplate",E.push({tag:"InterpolationInTemplate",nesting:I.length}),S=!1,yield{type:"TemplateHead",value:f[0]}):(S=!0,yield{type:"NoSubstitutionTemplate",value:f[0],closed:f[1]==="`"});continue}break;case"JSXTag":case"JSXTagEnd":if(t.lastIndex=p,f=t.exec(_)){switch(p=t.lastIndex,$=f[0],f[0]){case"<":E.push({tag:"JSXTag"});break;case">":E.pop(),m==="/"||P.tag==="JSXTagEnd"?($="?JSX",S=!0):E.push({tag:"JSXChildren"});break;case"{":E.push({tag:"InterpolationInJSX",nesting:I.length}),$="?InterpolationInJSX",S=!1;break;case"/":m==="<"&&(E.pop(),E[E.length-1].tag==="JSXChildren"&&E.pop(),E.push({tag:"JSXTagEnd"}))}m=$,yield{type:"JSXPunctuator",value:f[0]};continue}if(e.lastIndex=p,f=e.exec(_)){p=e.lastIndex,m=f[0],yield{type:"JSXIdentifier",value:f[0]};continue}if(n.lastIndex=p,f=n.exec(_)){p=n.lastIndex,m=f[0],yield{type:"JSXString",value:f[0],closed:f[2]!==void 0};continue}break;case"JSXChildren":if(i.lastIndex=p,f=i.exec(_)){p=i.lastIndex,m=f[0],yield{type:"JSXText",value:f[0]};continue}switch(_[p]){case"<":E.push({tag:"JSXTag"}),p++,m="<",yield{type:"JSXPunctuator",value:"<"};continue;case"{":E.push({tag:"InterpolationInJSX",nesting:I.length}),p++,m="?InterpolationInJSX",S=!1,yield{type:"JSXPunctuator",value:"{"};continue}}if(R.lastIndex=p,f=R.exec(_)){p=R.lastIndex,yield{type:"WhiteSpace",value:f[0]};continue}if(o.lastIndex=p,f=o.exec(_)){p=o.lastIndex,S=!1,a.test(m)&&(m="?NoLineTerminatorHere"),yield{type:"LineTerminatorSequence",value:f[0]};continue}if(l.lastIndex=p,f=l.exec(_)){p=l.lastIndex,d.test(f[0])&&(S=!1,a.test(m)&&(m="?NoLineTerminatorHere")),yield{type:"MultiLineComment",value:f[0],closed:f[1]!==void 0};continue}if(b.lastIndex=p,f=b.exec(_)){p=b.lastIndex,S=!1,yield{type:"SingleLineComment",value:f[0]};continue}A=String.fromCodePoint(_.codePointAt(p)),p+=A.length,m=A,S=!1,yield{type:P.tag.startsWith("JSX")?"JSXInvalid":"Invalid",value:A}}},j}et();var ge={keyword:["break","case","catch","continue","debugger","default","do","else","finally","for","function","if","return","switch","throw","try","var","const","while","with","new","this","super","class","extends","export","import","null","true","false","in","instanceof","typeof","void","delete"],strict:["implements","interface","let","package","private","protected","public","static","yield"]};new Set(ge.keyword);new Set(ge.strict);const ce="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",tt=new Uint8Array(64),rt=new Uint8Array(128);for(let r=0;r<ce.length;r++){const e=ce.charCodeAt(r);tt[r]=e,rt[e]=r}var ae;(function(r){r[r.Empty=1]="Empty",r[r.Hash=2]="Hash",r[r.Query=3]="Query",r[r.RelativePath=4]="RelativePath",r[r.AbsolutePath=5]="AbsolutePath",r[r.SchemeRelative=6]="SchemeRelative",r[r.Absolute=7]="Absolute"})(ae||(ae={}));const nt=/^[A-Za-z]:\//;function it(r=""){return r&&r.replace(/\\/g,"/").replace(nt,e=>e.toUpperCase())}const ot=/^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/;function st(){return typeof process!="undefined"&&typeof process.cwd=="function"?process.cwd().replace(/\\/g,"/"):"/"}const ct=function(...r){r=r.map(n=>it(n));let e="",t=!1;for(let n=r.length-1;n>=-1&&!t;n--){const i=n>=0?r[n]:st();!i||i.length===0||(e=`${i}/${e}`,t=le(i))}return e=at(e,!t),t&&!le(e)?`/${e}`:e.length>0?e:"."};function at(r,e){let t="",n=0,i=-1,s=0,a=null;for(let o=0;o<=r.length;++o){if(o<r.length)a=r[o];else{if(a==="/")break;a="/"}if(a==="/"){if(!(i===o-1||s===1))if(s===2){if(t.length<2||n!==2||t[t.length-1]!=="."||t[t.length-2]!=="."){if(t.length>2){const l=t.lastIndexOf("/");l===-1?(t="",n=0):(t=t.slice(0,l),n=t.length-1-t.lastIndexOf("/")),i=o,s=0;continue}else if(t.length>0){t="",n=0,i=o,s=0;continue}}e&&(t+=t.length>0?"/..":"..",n=2)}else t.length>0?t+=`/${r.slice(i+1,o)}`:t=r.slice(i+1,o),n=o-i-1;i=o,s=0}else a==="."&&s!==-1?++s:s=-1}return t}const le=function(r){return ot.test(r)},ve=/^\s*at .*(?:\S:\d+|\(native\))/m,lt=/^(?:eval@)?(?:\[native code\])?$/;function we(r){if(!r.includes(":"))return[r];const t=/(.+?)(?::(\d+))?(?::(\d+))?$/.exec(r.replace(/^\(|\)$/g,""));if(!t)return[r];let n=t[1];if(n.startsWith("async ")&&(n=n.slice(6)),n.startsWith("http:")||n.startsWith("https:")){const i=new URL(n);i.searchParams.delete("import"),i.searchParams.delete("browserv"),n=i.pathname+i.hash+i.search}if(n.startsWith("/@fs/")){const i=/^\/@fs\/[a-zA-Z]:\//.test(n);n=n.slice(i?5:4)}return[n,t[2]||void 0,t[3]||void 0]}function ut(r){let e=r.trim();if(lt.test(e)||(e.includes(" > eval")&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),!e.includes("@")&&!e.includes(":")))return null;const t=/((.*".+"[^@]*)?[^@]*)(@)/,n=e.match(t),i=n&&n[1]?n[1]:void 0,[s,a,o]=we(e.replace(t,""));return!s||!a||!o?null:{file:s,method:i||"",line:Number.parseInt(a),column:Number.parseInt(o)}}function ft(r){const e=r.trim();return ve.test(e)?dt(e):ut(e)}function dt(r){let e=r.trim();if(!ve.test(e))return null;e.includes("(eval ")&&(e=e.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(,.*$)/g,""));let t=e.replace(/^\s+/,"").replace(/\(eval code/g,"(").replace(/^.*?\s+/,"");const n=t.match(/ (\(.+\)$)/);t=n?t.replace(n[0],""):t;const[i,s,a]=we(n?n[1]:t);let o=n&&t||"",l=i&&["eval","<anonymous>"].includes(i)?void 0:i;return!l||!s||!a?null:(o.startsWith("async ")&&(o=o.slice(6)),l.startsWith("file://")&&(l=l.slice(7)),l=l.startsWith("node:")||l.startsWith("internal:")?l:ct(l),o&&(o=o.replace(/__vite_ssr_import_\d+__\./g,"")),{method:o,file:l,line:Number.parseInt(s),column:Number.parseInt(a)})}function pt(r){const e=(r==null?void 0:r.globalThisKey)||"__vitest_mocker__";function t(){return typeof globalThis[e]!="undefined"?globalThis[e]:new Proxy({},{get(n,i){throw new Error(`Vitest mocker was not initialized in this environment. vi.${String(i)}() is forbidden.`)}})}return{hoisted(n){if(typeof n!="function")throw new TypeError(`vi.hoisted() expects a function, but received a ${typeof n}`);return n()},mock(n,i){if(typeof n!="string")throw new TypeError(`vi.mock() expects a string path, but received a ${typeof n}`);const s=O("mock");t().queueMock(n,s,typeof i=="function"?()=>i(()=>t().importActual(n,s)):i)},unmock(n){if(typeof n!="string")throw new TypeError(`vi.unmock() expects a string path, but received a ${typeof n}`);t().queueUnmock(n,O("unmock"))},doMock(n,i){if(typeof n!="string")throw new TypeError(`vi.doMock() expects a string path, but received a ${typeof n}`);const s=O("doMock");t().queueMock(n,s,typeof i=="function"?()=>i(()=>t().importActual(n,s)):i)},doUnmock(n){if(typeof n!="string")throw new TypeError(`vi.doUnmock() expects a string path, but received a ${typeof n}`);t().queueUnmock(n,O("doUnmock"))},async importActual(n){return t().importActual(n,O("importActual"))},async importMock(n){return t().importMock(n,O("importMock"))}}}function O(r){const t=Qe({stackTraceLimit:5}).split(`
2
+ `),n=t.findIndex(s=>s.includes(` at Object.${r}`)||s.includes(`${r}@`)),i=ft(t[n+1]);return(i==null?void 0:i.file)||""}const{now:ue}=Date;class ht{constructor(e,t,n,i){x(this,"registry",new fe);x(this,"queue",new Set);x(this,"mockedIds",new Set);this.interceptor=e,this.rpc=t,this.spyOn=n,this.config=i}async prepare(){this.queue.size&&await Promise.all([...this.queue.values()])}async resolveFactoryModule(e){const t=this.registry.get(e);if(!t||t.type!=="manual")throw new Error(`Mock ${e} wasn't registered. This is probably a Vitest error. Please, open a new issue with reproduction.`);return await t.resolve()}getFactoryModule(e){const t=this.registry.get(e);if(!t||t.type!=="manual")throw new Error(`Mock ${e} wasn't registered. This is probably a Vitest error. Please, open a new issue with reproduction.`);if(!t.cache)throw new Error(`Mock ${e} wasn't resolved. This is probably a Vitest error. Please, open a new issue with reproduction.`);return t.cache}async invalidate(){const e=Array.from(this.mockedIds);e.length&&(await this.rpc.invalidate(e),await this.interceptor.invalidate(),this.registry.clear())}async importActual(e,t){const n=await this.rpc.resolveId(e,t);if(n==null)throw new Error(`[vitest] Cannot resolve "${e}" imported from "${t}"`);const i=Be(n.id),s=new URL(n.url,location.href),a=`_vitest_original&ext${i}`,o=`${s.pathname}${s.search?`${s.search}&${a}`:`?${a}`}${s.hash}`;return this.wrapDynamicImport(()=>import(o)).then(l=>{if(!n.optimized||typeof l.default=="undefined")return l;const d=l.default;return d!=null&&d.__esModule?d:Q(G({},typeof d=="object"&&!Array.isArray(d)||typeof d=="function"?d:{}),{default:d})})}async importMock(e,t){await this.prepare();const{resolvedId:n,resolvedUrl:i,redirectUrl:s}=await this.rpc.resolveMock(e,t,{mock:"auto"}),a=this.resolveMockPath(q(i));let o=this.registry.get(a);if(!o)if(s){const l=new URL(this.resolveMockPath(q(s)),location.href).toString();o=new N(e,n,a,l)}else o=new F(e,n,a);if(o.type==="manual")return await o.resolve();if(o.type==="automock"||o.type==="autospy"){const l=new URL(`/@id/${n}`,location.href),d=l.search?`${l.search}&t=${ue()}`:`?t=${ue()}`,h=await Ie(()=>import(`${l.pathname}${d}&mock=${o.type}${l.hash}`),[],import.meta.url);return this.mockObject(h,o.type)}return import(o.redirect)}mockObject(e,t="automock"){return xe({globalConstructors:{Object,Function,Array,Map,RegExp},spyOn:this.spyOn,type:t},e)}queueMock(e,t,n){const i=this.rpc.resolveMock(e,t,{mock:typeof n=="function"?"factory":n!=null&&n.spy?"spy":"auto"}).then(async({redirectUrl:s,resolvedId:a,resolvedUrl:o,needsInterop:l,mockType:d})=>{const h=this.resolveMockPath(q(o));this.mockedIds.add(a);const y=typeof n=="function"?async()=>{const g=await n();return l?{default:g}:g}:void 0,w=typeof s=="string"?new URL(this.resolveMockPath(q(s)),location.href).toString():null;let b;d==="manual"?b=this.registry.register("manual",e,a,h,y):d==="autospy"?b=this.registry.register("autospy",e,a,h):d==="redirect"?b=this.registry.register("redirect",e,a,h,w):b=this.registry.register("automock",e,a,h),await this.interceptor.register(b)}).finally(()=>{this.queue.delete(i)});this.queue.add(i)}queueUnmock(e,t){const n=this.rpc.resolveId(e,t).then(async i=>{if(!i)return;const s=this.resolveMockPath(q(i.url));this.mockedIds.add(i.id),this.registry.delete(s),await this.interceptor.delete(s)}).finally(()=>{this.queue.delete(n)});this.queue.add(n)}wrapDynamicImport(e){return typeof e=="function"?new Promise((n,i)=>{this.prepare().finally(()=>{e().then(n,i)})}):e}resolveMockPath(e){const t=this.config,n=Le("/@fs/",t.root);return e.startsWith(t.root)?e.slice(t.root.length):e.startsWith(n)?e.slice(n.length):e}}const mt=/(\?|&)v=\w{8}/;function q(r){return r.replace(mt,"")}class yt{constructor(){x(this,"mocks",new fe)}async register(e){this.mocks.add(e)}async delete(e){this.mocks.delete(e)}async invalidate(){this.mocks.clear()}}const Y=r=>{switch(r){case"resolveId":return Promise.resolve({id:"",url:"",optimized:!1});case"resolveMock":return Promise.resolve({mockType:"dummy",resolvedId:"",resolvedUrl:"",redirectUrl:"",needsInterop:!1});case"invalidate":return Promise.resolve()}};class gt extends ht{queueMock(){}}function vt(r){const e=new gt(r("__vitest_mocker__"),{resolveId(t,n){return Y("resolveId")},resolveMock(t,n,i){return Y("resolveMock")},async invalidate(t){return Y("invalidate")}},(...t)=>globalThis.__STORYBOOK_MODULE_TEST__.spyOn(...t),{root:""});return globalThis.__vitest_mocker__=e,pt({globalThisKey:"__vitest_mocker__"})}globalThis.__STORYBOOK_MOCKER__=vt(()=>new yt);
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
package/tsconfig.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "useDefineForClassFields": true,
5
+ "module": "ESNext",
6
+ "lib": ["ES2022", "DOM", "DOM.Iterable"],
7
+ "types": ["vite/client"],
8
+ "skipLibCheck": true,
9
+
10
+ /* Bundler mode */
11
+ "moduleResolution": "bundler",
12
+ "allowImportingTsExtensions": true,
13
+ "verbatimModuleSyntax": true,
14
+ "moduleDetection": "force",
15
+ "noEmit": true,
16
+
17
+ /* Linting */
18
+ "strict": true,
19
+ "noUnusedLocals": true,
20
+ "noUnusedParameters": true,
21
+ "erasableSyntaxOnly": true,
22
+ "noFallthroughCasesInSwitch": true,
23
+ "noUncheckedSideEffectImports": true
24
+ },
25
+ "include": ["src"]
26
+ }
package/vite.config.ts ADDED
@@ -0,0 +1,60 @@
1
+ /// <reference types="vitest/config" />
2
+ import { defineConfig } from 'vite';
3
+ import { resolve } from 'path';
4
+ import dts from 'vite-plugin-dts';
5
+ import path from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+ import { storybookTest } from '@storybook/addon-vitest/vitest-plugin';
8
+ import cssInjectedByJsPlugin from 'vite-plugin-css-injected-by-js'
9
+ import { playwright } from '@vitest/browser-playwright';
10
+ const dirname = typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url));
11
+
12
+ // More info at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon
13
+ export default defineConfig({
14
+ plugins: [dts(), cssInjectedByJsPlugin()],
15
+ build: {
16
+ lib: {
17
+ entry: resolve(__dirname, 'src/index.ts'),
18
+ name: 'KfChatSdk',
19
+ formats: ['es', 'cjs', 'umd', 'iife'],
20
+ fileName: format => `kf-chat-sdk.${format}.js`
21
+ },
22
+ target: 'es2017',
23
+ cssCodeSplit: false,
24
+ rollupOptions: {
25
+ // 原生库一般不需要 external
26
+ external: [],
27
+ output: {
28
+ globals: {}
29
+ }
30
+ }
31
+ },
32
+ resolve: {
33
+ alias: {
34
+ '@': path.resolve(__dirname, './src')
35
+ }
36
+ },
37
+ test: {
38
+ projects: [{
39
+ extends: true,
40
+ plugins: [
41
+ // The plugin will run tests for the stories defined in your Storybook config
42
+ // See options at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon#storybooktest
43
+ storybookTest({
44
+ configDir: path.join(dirname, '.storybook')
45
+ })],
46
+ test: {
47
+ name: 'storybook',
48
+ browser: {
49
+ enabled: true,
50
+ headless: true,
51
+ provider: playwright({}),
52
+ instances: [{
53
+ browser: 'chromium'
54
+ }]
55
+ },
56
+ setupFiles: ['.storybook/vitest.setup.ts']
57
+ }
58
+ }]
59
+ }
60
+ });
@@ -0,0 +1 @@
1
+ /// <reference types="@vitest/browser-playwright" />