@fremtind/jokul 0.35.0 → 0.35.1

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 (122) hide show
  1. package/build/TestHelper-BMt-MGSi.cjs +2 -0
  2. package/build/TestHelper-BMt-MGSi.cjs.map +1 -0
  3. package/build/TestHelper-Dudd9Y1P.js +2 -0
  4. package/build/TestHelper-Dudd9Y1P.js.map +1 -0
  5. package/build/build-stats.html +1 -1
  6. package/build/cjs/components/accordion/integration/accordion.spec.cjs +1 -1
  7. package/build/cjs/components/accordion/integration/accordion.spec.cjs.map +1 -1
  8. package/build/cjs/components/breadcrumb/integration/breadcrumb.spec.cjs +1 -1
  9. package/build/cjs/components/button/integration/button.spec.cjs +1 -1
  10. package/build/cjs/components/card/integration/card.spec.cjs +1 -1
  11. package/build/cjs/components/checkbox/integration/checkbox.spec.cjs +1 -1
  12. package/build/cjs/components/combobox/integration/combobox.spec.cjs +1 -1
  13. package/build/cjs/components/cookie-consent/integration/cookie-consent.spec.cjs +1 -1
  14. package/build/cjs/components/datepicker/integration/datepicker.spec.cjs +1 -1
  15. package/build/cjs/components/description-list/integration/description-list.spec.cjs +1 -1
  16. package/build/cjs/components/feedback/integration/feedback.spec.cjs +1 -1
  17. package/build/cjs/components/file-input/integration/file-input.spec.cjs +1 -1
  18. package/build/cjs/components/icon/integration/icon.spec.cjs +1 -1
  19. package/build/cjs/components/icon-button/integration/icon-button.spec.cjs +1 -1
  20. package/build/cjs/components/image/integration/image.spec.cjs +1 -1
  21. package/build/cjs/components/image/integration/image.spec.cjs.map +1 -1
  22. package/build/cjs/components/input-group/integration/input-group.spec.cjs +1 -1
  23. package/build/cjs/components/input-panel/integration/input-panel.spec.cjs +1 -1
  24. package/build/cjs/components/link/integration/link.spec.cjs +1 -1
  25. package/build/cjs/components/link-list/integration/link-list.spec.cjs +1 -1
  26. package/build/cjs/components/list/integration/list.spec.cjs +1 -1
  27. package/build/cjs/components/menu/integration/menu.spec.cjs +1 -1
  28. package/build/cjs/components/message/integration/message.spec.cjs +1 -1
  29. package/build/cjs/components/modal/integration/modal.spec.cjs +1 -1
  30. package/build/cjs/components/pagination/integration/pagination.spec.cjs +1 -1
  31. package/build/cjs/components/popover/integration/popover.spec.cjs +1 -1
  32. package/build/cjs/components/popover/integration/popover.spec.cjs.map +1 -1
  33. package/build/cjs/components/progress-bar/integration/progress-bar.spec.cjs +1 -1
  34. package/build/cjs/components/radio-button/integration/radio-button.spec.cjs +1 -1
  35. package/build/cjs/components/select/integration/select.spec.cjs +1 -1
  36. package/build/cjs/components/summary-table/integration/summary-table.spec.cjs +1 -1
  37. package/build/cjs/components/system-message/integration/system-message.spec.cjs +1 -1
  38. package/build/cjs/components/table/integration/table.spec.cjs +1 -1
  39. package/build/cjs/components/tabs/integration/tabs.spec.cjs +1 -1
  40. package/build/cjs/components/tag/integration/tag.spec.cjs +1 -1
  41. package/build/cjs/components/text-input/integration/text-input.spec.cjs +1 -1
  42. package/build/cjs/components/toast/integration/toast.spec.cjs +1 -1
  43. package/build/cjs/components/toggle-switch/integration/toggle-switch.spec.cjs +1 -1
  44. package/build/cjs/components/tooltip/integration/tooltip.spec.cjs +1 -1
  45. package/build/cjs/components/tooltip/integration/tooltip.spec.cjs.map +1 -1
  46. package/build/cjs/hooks/useAnimatedDetails/useAnimatedDetails.cjs.map +1 -1
  47. package/build/cjs/hooks/useAnimatedDetails/useAnimatedDetails.d.cts +1 -0
  48. package/build/es/components/accordion/integration/accordion.spec.js +1 -1
  49. package/build/es/components/accordion/integration/accordion.spec.js.map +1 -1
  50. package/build/es/components/breadcrumb/integration/breadcrumb.spec.js +1 -1
  51. package/build/es/components/button/integration/button.spec.js +1 -1
  52. package/build/es/components/card/integration/card.spec.js +1 -1
  53. package/build/es/components/checkbox/integration/checkbox.spec.js +1 -1
  54. package/build/es/components/combobox/integration/combobox.spec.js +1 -1
  55. package/build/es/components/cookie-consent/integration/cookie-consent.spec.js +1 -1
  56. package/build/es/components/datepicker/integration/datepicker.spec.js +1 -1
  57. package/build/es/components/description-list/integration/description-list.spec.js +1 -1
  58. package/build/es/components/feedback/integration/feedback.spec.js +1 -1
  59. package/build/es/components/file-input/integration/file-input.spec.js +1 -1
  60. package/build/es/components/icon/integration/icon.spec.js +1 -1
  61. package/build/es/components/icon-button/integration/icon-button.spec.js +1 -1
  62. package/build/es/components/image/integration/image.spec.js +1 -1
  63. package/build/es/components/image/integration/image.spec.js.map +1 -1
  64. package/build/es/components/input-group/integration/input-group.spec.js +1 -1
  65. package/build/es/components/input-panel/integration/input-panel.spec.js +1 -1
  66. package/build/es/components/link/integration/link.spec.js +1 -1
  67. package/build/es/components/link-list/integration/link-list.spec.js +1 -1
  68. package/build/es/components/list/integration/list.spec.js +1 -1
  69. package/build/es/components/menu/integration/menu.spec.js +1 -1
  70. package/build/es/components/message/integration/message.spec.js +1 -1
  71. package/build/es/components/modal/integration/modal.spec.js +1 -1
  72. package/build/es/components/pagination/integration/pagination.spec.js +1 -1
  73. package/build/es/components/popover/integration/popover.spec.js +1 -1
  74. package/build/es/components/popover/integration/popover.spec.js.map +1 -1
  75. package/build/es/components/progress-bar/integration/progress-bar.spec.js +1 -1
  76. package/build/es/components/radio-button/integration/radio-button.spec.js +1 -1
  77. package/build/es/components/select/integration/select.spec.js +1 -1
  78. package/build/es/components/summary-table/integration/summary-table.spec.js +1 -1
  79. package/build/es/components/system-message/integration/system-message.spec.js +1 -1
  80. package/build/es/components/table/integration/table.spec.js +1 -1
  81. package/build/es/components/tabs/integration/tabs.spec.js +1 -1
  82. package/build/es/components/tag/integration/tag.spec.js +1 -1
  83. package/build/es/components/text-input/integration/text-input.spec.js +1 -1
  84. package/build/es/components/toast/integration/toast.spec.js +1 -1
  85. package/build/es/components/toggle-switch/integration/toggle-switch.spec.js +1 -1
  86. package/build/es/components/tooltip/integration/tooltip.spec.js +1 -1
  87. package/build/es/components/tooltip/integration/tooltip.spec.js.map +1 -1
  88. package/build/es/hooks/useAnimatedDetails/useAnimatedDetails.d.ts +1 -0
  89. package/build/es/hooks/useAnimatedDetails/useAnimatedDetails.js.map +1 -1
  90. package/package.json +2 -2
  91. package/styles/components/button/button.css +2 -2
  92. package/styles/components/button/button.min.css +1 -1
  93. package/styles/components/checkbox/checkbox.css +4 -4
  94. package/styles/components/checkbox/checkbox.min.css +1 -1
  95. package/styles/components/feedback/feedback.css +2 -2
  96. package/styles/components/feedback/feedback.min.css +1 -1
  97. package/styles/components/input-group/input-group.css +2 -2
  98. package/styles/components/input-group/input-group.min.css +1 -1
  99. package/styles/components/input-panel/checkbox-panel.css +2 -2
  100. package/styles/components/input-panel/checkbox-panel.min.css +1 -1
  101. package/styles/components/input-panel/radio-panel.css +2 -2
  102. package/styles/components/input-panel/radio-panel.min.css +1 -1
  103. package/styles/components/loader/loader.css +6 -6
  104. package/styles/components/loader/loader.min.css +1 -1
  105. package/styles/components/loader/skeleton-loader.css +5 -5
  106. package/styles/components/loader/skeleton-loader.min.css +1 -1
  107. package/styles/components/message/message.css +2 -2
  108. package/styles/components/message/message.min.css +1 -1
  109. package/styles/components/progress-bar/progress-bar.css +2 -2
  110. package/styles/components/progress-bar/progress-bar.min.css +1 -1
  111. package/styles/components/radio-button/radio-button.css +2 -2
  112. package/styles/components/radio-button/radio-button.min.css +1 -1
  113. package/styles/components/system-message/system-message.css +2 -2
  114. package/styles/components/system-message/system-message.min.css +1 -1
  115. package/styles/components/toast/toast.css +4 -4
  116. package/styles/components/toast/toast.min.css +1 -1
  117. package/styles/styles.css +37 -37
  118. package/styles/styles.min.css +1 -1
  119. package/build/TestHelper-BVq1XrAt.cjs +0 -2
  120. package/build/TestHelper-BVq1XrAt.cjs.map +0 -1
  121. package/build/TestHelper-CT9BmbYb.js +0 -2
  122. package/build/TestHelper-CT9BmbYb.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ "use strict";var e=Object.defineProperty,t=(t,a,i)=>((t,a,i)=>a in t?e(t,a,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[a]=i)(t,"symbol"!=typeof a?a+"":a,i);const a=require("@playwright/test"),i=require("@vitejs/plugin-react-swc"),s=require("node:path"),o=require("node:url"),r=require("vite"),n=require("node:fs");var c=typeof document<"u"?document.currentScript:null;function l(e){return{name:"setup-dev",buildStart(){n.cpSync(s.resolve(o.fileURLToPath(new URL("data:text/javascript;base64,ZXhwb3J0ICogZnJvbSAiLi9jb3B5LWprbC1mb250cy5tanMiOwpleHBvcnQgKiBmcm9tICIuL3NldHVwLWRldi5tanMiOwo=",typeof document>"u"?require("url").pathToFileURL(__filename).href:c&&c.src||new URL("TestHelper-BMt-MGSi.cjs",document.baseURI).href)),"index.html"),s.resolve(e,"index.html")),n.cpSync(s.resolve(o.fileURLToPath(new URL("data:text/javascript;base64,ZXhwb3J0ICogZnJvbSAiLi9jb3B5LWprbC1mb250cy5tanMiOwpleHBvcnQgKiBmcm9tICIuL3NldHVwLWRldi5tanMiOwo=",typeof document>"u"?require("url").pathToFileURL(__filename).href:c&&c.src||new URL("TestHelper-BMt-MGSi.cjs",document.baseURI).href)),"main.tsx"),s.resolve(e,"main.tsx")),console.log(`Copied index.html and main.tsx into "${e}"`)},buildEnd(){n.rmSync(s.resolve(e,"index.html")),n.rmSync(s.resolve(e,"main.tsx")),console.log(`Deleted index.html and main.tsx from "${e}"`)}}}exports.TestHelper=class{constructor(e){t(this,"server"),t(this,"_page"),t(this,"package"),t(this,"projectName"),this._page=e.page,this.package=e.package,this.projectName=e.projectName,this._page.emulateMedia({forcedColors:"none",reducedMotion:"reduce"})}async init(){return this.server=await r.createServer({mode:"production",configFile:!1,plugins:[i(),(e=s.resolve(o.fileURLToPath(new URL("data:application/octet-stream;base64,ZXhwb3J0IHsgVGVzdEhlbHBlciB9IGZyb20gIi4vVGVzdEhlbHBlci5tdHMiOwo=",typeof document>"u"?require("url").pathToFileURL(__filename).href:c&&c.src||new URL("TestHelper-BMt-MGSi.cjs",document.baseURI).href)),"..","..","packages","jokul","src","components",this.package,"documentation","public","fonts"),{name:"copy-jkl-fonts",configResolved(){const t=s.resolve(o.fileURLToPath(new URL("data:text/javascript;base64,ZXhwb3J0ICogZnJvbSAiLi9jb3B5LWprbC1mb250cy5tanMiOwpleHBvcnQgKiBmcm9tICIuL3NldHVwLWRldi5tanMiOwo=",typeof document>"u"?require("url").pathToFileURL(__filename).href:c&&c.src||new URL("TestHelper-BMt-MGSi.cjs",document.baseURI).href)),"..","..","packages","webfonts","fonts");n.existsSync(e)||(n.cpSync(t,e,{recursive:!0}),console.log(`Copied font files into "${e}"`))}}),l(s.resolve(o.fileURLToPath(new URL("data:application/octet-stream;base64,ZXhwb3J0IHsgVGVzdEhlbHBlciB9IGZyb20gIi4vVGVzdEhlbHBlci5tdHMiOwo=",typeof document>"u"?require("url").pathToFileURL(__filename).href:c&&c.src||new URL("TestHelper-BMt-MGSi.cjs",document.baseURI).href)),"..","..","packages","jokul","src","components",this.package,"documentation"))],resolve:{alias:{"doc-utils":s.resolve(o.fileURLToPath(new URL("data:application/octet-stream;base64,ZXhwb3J0IHsgVGVzdEhlbHBlciB9IGZyb20gIi4vVGVzdEhlbHBlci5tdHMiOwo=",typeof document>"u"?require("url").pathToFileURL(__filename).href:c&&c.src||new URL("TestHelper-BMt-MGSi.cjs",document.baseURI).href)),"..","dev-example")}},root:s.resolve(o.fileURLToPath(new URL("data:application/octet-stream;base64,ZXhwb3J0IHsgVGVzdEhlbHBlciB9IGZyb20gIi4vVGVzdEhlbHBlci5tdHMiOwo=",typeof document>"u"?require("url").pathToFileURL(__filename).href:c&&c.src||new URL("TestHelper-BMt-MGSi.cjs",document.baseURI).href)),"..","..","packages","jokul","src","components",this.package,"documentation"),define:{__CI__:"true"}}),await this.server.listen(),this.server.config.server.port;var e}get page(){return this._page}async close(){var e;await(null==(e=this.server)?void 0:e.close())}async open(e="/"){var t;await this._page.goto(`http://localhost:${null==(t=this.server)?void 0:t.config.server.port}${e}`)}async clickElement(e){await this._page.click(e)}async pressKey(e){await this._page.keyboard.press(e)}async checkProp(e){return await this._page.getByTestId(e).first().check({force:!0}),this}async setDensity(e){return await this._page.getByTestId(`density-${e}`).first().check({force:!0}),this}async setTheme(e){return await this._page.getByTestId(`theme-${e}`).first().check({force:!0}),this}async snapshot(e,t){await this._page.evaluate((()=>document.fonts.ready));const i=await this._page.locator(t||"[data-testid='component-example']").first().boundingBox();if(!i)return;const s=`${`packages/jokul/src/components/${this.package}/integration/__screenshots__`}/${a.test.info().title.replaceAll(" ","-")}-${this.projectName}-${e}.png`;n.existsSync(s)?await a.expect(await this._page.screenshot({animations:"disabled",caret:"hide",clip:{...i}})).toMatchSnapshot(`${this.projectName}-${e}`):await this._page.screenshot({animations:"disabled",caret:"hide",clip:{...i},path:s})}async snapshots({before:e,after:t,selector:a}={}){await this.setDensity("default"),await this.setTheme("light"),await(null==e?void 0:e()),await this.snapshot("default",a),await(null==t?void 0:t()),await this.setDensity("default"),await this.setTheme("dark"),await(null==e?void 0:e()),await this.snapshot("default-dark",a),await(null==t?void 0:t()),await this.setDensity("compact"),await this.setTheme("light"),await(null==e?void 0:e()),await this.snapshot("compact-light",a),await(null==t?void 0:t()),await this.setDensity("compact"),await this.setTheme("dark"),await(null==e?void 0:e()),await this.snapshot("compact-dark",a),await(null==t?void 0:t())}};
2
+ //# sourceMappingURL=TestHelper-BMt-MGSi.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestHelper-BMt-MGSi.cjs","sources":["../../../utils/vite/setup-dev.mjs","../../../utils/playwright/TestHelper.mts","../../../utils/vite/copy-jkl-fonts.mjs"],"sourcesContent":["import { cpSync, rmSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nfunction setupDev(destination) {\n return {\n name: \"setup-dev\",\n buildStart() {\n cpSync(\n resolve(fileURLToPath(new URL(\".\", import.meta.url)), \"index.html\"),\n resolve(destination, \"index.html\"),\n );\n cpSync(resolve(fileURLToPath(new URL(\".\", import.meta.url)), \"main.tsx\"), resolve(destination, \"main.tsx\"));\n console.log(`Copied index.html and main.tsx into \"${destination}\"`);\n },\n buildEnd() {\n rmSync(resolve(destination, \"index.html\"));\n rmSync(resolve(destination, \"main.tsx\"));\n console.log(`Deleted index.html and main.tsx from \"${destination}\"`);\n },\n };\n}\n\nexport { setupDev };\n","import { expect, Page, test } from \"@playwright/test\";\nimport react from \"@vitejs/plugin-react-swc\";\nimport { resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { createServer, ViteDevServer } from \"vite\";\n/* @ts-ignore */\nimport { copyJklFonts } from \"../vite/copy-jkl-fonts.mjs\";\nimport { existsSync } from \"node:fs\";\n/* @ts-ignore */\nimport { setupDev } from \"../vite/setup-dev.mjs\";\n\nexport class TestHelper {\n private server?: ViteDevServer;\n private _page: Page;\n private package: string;\n private projectName: string;\n\n constructor(args: { page: Page; package: string; projectName: string }) {\n this._page = args.page;\n this.package = args.package;\n this.projectName = args.projectName;\n\n this._page.emulateMedia({\n forcedColors: \"none\",\n reducedMotion: \"reduce\",\n });\n }\n\n async init() {\n this.server = await createServer({\n mode: \"production\",\n configFile: false,\n plugins: [\n react(),\n copyJklFonts(\n resolve(\n fileURLToPath(new URL(\".\", import.meta.url)),\n \"..\",\n \"..\",\n \"packages\",\n \"jokul\",\n \"src\",\n \"components\",\n this.package,\n \"documentation\",\n \"public\",\n \"fonts\",\n ),\n ),\n setupDev(\n resolve(\n fileURLToPath(new URL(\".\", import.meta.url)),\n \"..\",\n \"..\",\n \"packages\",\n \"jokul\",\n \"src\",\n \"components\",\n this.package,\n \"documentation\",\n ),\n ),\n ],\n resolve: {\n alias: {\n \"doc-utils\": resolve(\n fileURLToPath(new URL(\".\", import.meta.url)),\n \"..\",\n \"dev-example\",\n ),\n },\n },\n root: resolve(\n fileURLToPath(new URL(\".\", import.meta.url)),\n \"..\",\n \"..\",\n \"packages\",\n \"jokul\",\n \"src\",\n \"components\",\n this.package,\n \"documentation\",\n ),\n define: {\n __CI__: \"true\",\n },\n });\n await this.server.listen();\n return this.server.config.server.port as number;\n }\n\n get page() {\n return this._page;\n }\n\n async close() {\n await this.server?.close();\n }\n\n async open(path: string = \"/\") {\n await this._page.goto(\n `http://localhost:${this.server?.config.server.port}${path}`,\n );\n }\n\n async clickElement(selector: string) {\n await this._page.click(selector);\n }\n\n async pressKey(key: string) {\n await this._page.keyboard.press(key);\n }\n\n async checkProp(testid: string) {\n await this._page.getByTestId(testid).first().check({ force: true });\n return this;\n }\n\n async setDensity(value: \"compact\" | \"default\") {\n await this._page\n .getByTestId(`density-${value}`)\n .first()\n .check({ force: true });\n return this;\n }\n\n async setTheme(value: \"light\" | \"dark\") {\n await this._page\n .getByTestId(`theme-${value}`)\n .first()\n .check({ force: true });\n return this;\n }\n\n private async snapshot(name: string, selector?: string) {\n await this._page.evaluate(() => document.fonts.ready);\n\n const locator = this._page\n .locator(selector || \"[data-testid='component-example']\")\n .first();\n const box = await locator.boundingBox();\n\n if (!box) {\n return;\n }\n\n const screenshotRoot = `packages/jokul/src/components/${this.package}/integration/__screenshots__`;\n const testName = test.info().title.replaceAll(\" \", \"-\");\n const screenshotPath = `${screenshotRoot}/${testName}-${this.projectName}-${name}.png`;\n\n const hasScreenshot = existsSync(screenshotPath);\n\n if (hasScreenshot) {\n await expect(\n await this._page.screenshot({\n animations: \"disabled\",\n caret: \"hide\",\n clip: { ...box },\n }),\n ).toMatchSnapshot(`${this.projectName}-${name}`);\n } else {\n await this._page.screenshot({\n animations: \"disabled\",\n caret: \"hide\",\n clip: { ...box },\n path: screenshotPath,\n });\n }\n }\n\n async snapshots({\n before,\n after,\n selector,\n }: {\n before?: () => Promise<any>;\n after?: () => Promise<any>;\n selector?: string;\n } = {}) {\n await this.setDensity(\"default\");\n await this.setTheme(\"light\");\n await before?.();\n await this.snapshot(\"default\", selector);\n await after?.();\n\n await this.setDensity(\"default\");\n await this.setTheme(\"dark\");\n await before?.();\n await this.snapshot(\"default-dark\", selector);\n await after?.();\n\n await this.setDensity(\"compact\");\n await this.setTheme(\"light\");\n await before?.();\n await this.snapshot(\"compact-light\", selector);\n await after?.();\n\n await this.setDensity(\"compact\");\n await this.setTheme(\"dark\");\n await before?.();\n await this.snapshot(\"compact-dark\", selector);\n await after?.();\n }\n}\n","import { cpSync, existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nfunction copyJklFonts(destination) {\n return {\n name: \"copy-jkl-fonts\",\n configResolved() {\n const source = resolve(\n fileURLToPath(new URL(\".\", import.meta.url)),\n \"..\",\n \"..\",\n \"packages\",\n \"webfonts\",\n \"fonts\",\n );\n if (!existsSync(destination)) {\n cpSync(source, destination, {\n recursive: true,\n });\n console.log(`Copied font files into \"${destination}\"`);\n }\n },\n };\n}\n\nexport { copyJklFonts };\n"],"names":["setupDev","destination","name","buildStart","cpSync","resolve","fileURLToPath","URL","document","require","pathToFileURL","__filename","href","_documentCurrentScript","src","baseURI","console","log","buildEnd","rmSync","constructor","args","__publicField","this","_page","page","package","projectName","emulateMedia","forcedColors","reducedMotion","async","server","createServer","mode","configFile","plugins","react","configResolved","source","existsSync","recursive","alias","root","define","__CI__","listen","config","port","_a","close","path","goto","selector","click","key","keyboard","press","testid","getByTestId","first","check","force","value","evaluate","fonts","ready","box","locator","boundingBox","screenshotPath","test","info","title","replaceAll","expect","screenshot","animations","caret","clip","toMatchSnapshot","before","after","setDensity","setTheme","snapshot"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ var t=Object.defineProperty,e=(e,a,i)=>((e,a,i)=>a in e?t(e,a,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[a]=i)(e,"symbol"!=typeof a?a+"":a,i);import{test as a,expect as i}from"@playwright/test";import s from"@vitejs/plugin-react-swc";import{resolve as o}from"node:path";import{fileURLToPath as n}from"node:url";import{createServer as c}from"vite";import{existsSync as r,cpSync as l,rmSync as p}from"node:fs";function h(t){return{name:"setup-dev",buildStart(){l(o(n(new URL("data:text/javascript;base64,ZXhwb3J0ICogZnJvbSAiLi9jb3B5LWprbC1mb250cy5tanMiOwpleHBvcnQgKiBmcm9tICIuL3NldHVwLWRldi5tanMiOwo=",import.meta.url)),"index.html"),o(t,"index.html")),l(o(n(new URL("data:text/javascript;base64,ZXhwb3J0ICogZnJvbSAiLi9jb3B5LWprbC1mb250cy5tanMiOwpleHBvcnQgKiBmcm9tICIuL3NldHVwLWRldi5tanMiOwo=",import.meta.url)),"main.tsx"),o(t,"main.tsx")),console.log(`Copied index.html and main.tsx into "${t}"`)},buildEnd(){p(o(t,"index.html")),p(o(t,"main.tsx")),console.log(`Deleted index.html and main.tsx from "${t}"`)}}}class d{constructor(t){e(this,"server"),e(this,"_page"),e(this,"package"),e(this,"projectName"),this._page=t.page,this.package=t.package,this.projectName=t.projectName,this._page.emulateMedia({forcedColors:"none",reducedMotion:"reduce"})}async init(){return this.server=await c({mode:"production",configFile:!1,plugins:[s(),(t=o(n(new URL("data:application/octet-stream;base64,ZXhwb3J0IHsgVGVzdEhlbHBlciB9IGZyb20gIi4vVGVzdEhlbHBlci5tdHMiOwo=",import.meta.url)),"..","..","packages","jokul","src","components",this.package,"documentation","public","fonts"),{name:"copy-jkl-fonts",configResolved(){const e=o(n(new URL("data:text/javascript;base64,ZXhwb3J0ICogZnJvbSAiLi9jb3B5LWprbC1mb250cy5tanMiOwpleHBvcnQgKiBmcm9tICIuL3NldHVwLWRldi5tanMiOwo=",import.meta.url)),"..","..","packages","webfonts","fonts");r(t)||(l(e,t,{recursive:!0}),console.log(`Copied font files into "${t}"`))}}),h(o(n(new URL("data:application/octet-stream;base64,ZXhwb3J0IHsgVGVzdEhlbHBlciB9IGZyb20gIi4vVGVzdEhlbHBlci5tdHMiOwo=",import.meta.url)),"..","..","packages","jokul","src","components",this.package,"documentation"))],resolve:{alias:{"doc-utils":o(n(new URL("data:application/octet-stream;base64,ZXhwb3J0IHsgVGVzdEhlbHBlciB9IGZyb20gIi4vVGVzdEhlbHBlci5tdHMiOwo=",import.meta.url)),"..","dev-example")}},root:o(n(new URL("data:application/octet-stream;base64,ZXhwb3J0IHsgVGVzdEhlbHBlciB9IGZyb20gIi4vVGVzdEhlbHBlci5tdHMiOwo=",import.meta.url)),"..","..","packages","jokul","src","components",this.package,"documentation"),define:{__CI__:"true"}}),await this.server.listen(),this.server.config.server.port;var t}get page(){return this._page}async close(){var t;await(null==(t=this.server)?void 0:t.close())}async open(t="/"){var e;await this._page.goto(`http://localhost:${null==(e=this.server)?void 0:e.config.server.port}${t}`)}async clickElement(t){await this._page.click(t)}async pressKey(t){await this._page.keyboard.press(t)}async checkProp(t){return await this._page.getByTestId(t).first().check({force:!0}),this}async setDensity(t){return await this._page.getByTestId(`density-${t}`).first().check({force:!0}),this}async setTheme(t){return await this._page.getByTestId(`theme-${t}`).first().check({force:!0}),this}async snapshot(t,e){await this._page.evaluate((()=>document.fonts.ready));const s=await this._page.locator(e||"[data-testid='component-example']").first().boundingBox();if(!s)return;const o=`${`packages/jokul/src/components/${this.package}/integration/__screenshots__`}/${a.info().title.replaceAll(" ","-")}-${this.projectName}-${t}.png`;r(o)?await i(await this._page.screenshot({animations:"disabled",caret:"hide",clip:{...s}})).toMatchSnapshot(`${this.projectName}-${t}`):await this._page.screenshot({animations:"disabled",caret:"hide",clip:{...s},path:o})}async snapshots({before:t,after:e,selector:a}={}){await this.setDensity("default"),await this.setTheme("light"),await(null==t?void 0:t()),await this.snapshot("default",a),await(null==e?void 0:e()),await this.setDensity("default"),await this.setTheme("dark"),await(null==t?void 0:t()),await this.snapshot("default-dark",a),await(null==e?void 0:e()),await this.setDensity("compact"),await this.setTheme("light"),await(null==t?void 0:t()),await this.snapshot("compact-light",a),await(null==e?void 0:e()),await this.setDensity("compact"),await this.setTheme("dark"),await(null==t?void 0:t()),await this.snapshot("compact-dark",a),await(null==e?void 0:e())}}export{d as T};
2
+ //# sourceMappingURL=TestHelper-Dudd9Y1P.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestHelper-Dudd9Y1P.js","sources":["../../../utils/vite/setup-dev.mjs","../../../utils/playwright/TestHelper.mts","../../../utils/vite/copy-jkl-fonts.mjs"],"sourcesContent":["import { cpSync, rmSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nfunction setupDev(destination) {\n return {\n name: \"setup-dev\",\n buildStart() {\n cpSync(\n resolve(fileURLToPath(new URL(\".\", import.meta.url)), \"index.html\"),\n resolve(destination, \"index.html\"),\n );\n cpSync(resolve(fileURLToPath(new URL(\".\", import.meta.url)), \"main.tsx\"), resolve(destination, \"main.tsx\"));\n console.log(`Copied index.html and main.tsx into \"${destination}\"`);\n },\n buildEnd() {\n rmSync(resolve(destination, \"index.html\"));\n rmSync(resolve(destination, \"main.tsx\"));\n console.log(`Deleted index.html and main.tsx from \"${destination}\"`);\n },\n };\n}\n\nexport { setupDev };\n","import { expect, Page, test } from \"@playwright/test\";\nimport react from \"@vitejs/plugin-react-swc\";\nimport { resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { createServer, ViteDevServer } from \"vite\";\n/* @ts-ignore */\nimport { copyJklFonts } from \"../vite/copy-jkl-fonts.mjs\";\nimport { existsSync } from \"node:fs\";\n/* @ts-ignore */\nimport { setupDev } from \"../vite/setup-dev.mjs\";\n\nexport class TestHelper {\n private server?: ViteDevServer;\n private _page: Page;\n private package: string;\n private projectName: string;\n\n constructor(args: { page: Page; package: string; projectName: string }) {\n this._page = args.page;\n this.package = args.package;\n this.projectName = args.projectName;\n\n this._page.emulateMedia({\n forcedColors: \"none\",\n reducedMotion: \"reduce\",\n });\n }\n\n async init() {\n this.server = await createServer({\n mode: \"production\",\n configFile: false,\n plugins: [\n react(),\n copyJklFonts(\n resolve(\n fileURLToPath(new URL(\".\", import.meta.url)),\n \"..\",\n \"..\",\n \"packages\",\n \"jokul\",\n \"src\",\n \"components\",\n this.package,\n \"documentation\",\n \"public\",\n \"fonts\",\n ),\n ),\n setupDev(\n resolve(\n fileURLToPath(new URL(\".\", import.meta.url)),\n \"..\",\n \"..\",\n \"packages\",\n \"jokul\",\n \"src\",\n \"components\",\n this.package,\n \"documentation\",\n ),\n ),\n ],\n resolve: {\n alias: {\n \"doc-utils\": resolve(\n fileURLToPath(new URL(\".\", import.meta.url)),\n \"..\",\n \"dev-example\",\n ),\n },\n },\n root: resolve(\n fileURLToPath(new URL(\".\", import.meta.url)),\n \"..\",\n \"..\",\n \"packages\",\n \"jokul\",\n \"src\",\n \"components\",\n this.package,\n \"documentation\",\n ),\n define: {\n __CI__: \"true\",\n },\n });\n await this.server.listen();\n return this.server.config.server.port as number;\n }\n\n get page() {\n return this._page;\n }\n\n async close() {\n await this.server?.close();\n }\n\n async open(path: string = \"/\") {\n await this._page.goto(\n `http://localhost:${this.server?.config.server.port}${path}`,\n );\n }\n\n async clickElement(selector: string) {\n await this._page.click(selector);\n }\n\n async pressKey(key: string) {\n await this._page.keyboard.press(key);\n }\n\n async checkProp(testid: string) {\n await this._page.getByTestId(testid).first().check({ force: true });\n return this;\n }\n\n async setDensity(value: \"compact\" | \"default\") {\n await this._page\n .getByTestId(`density-${value}`)\n .first()\n .check({ force: true });\n return this;\n }\n\n async setTheme(value: \"light\" | \"dark\") {\n await this._page\n .getByTestId(`theme-${value}`)\n .first()\n .check({ force: true });\n return this;\n }\n\n private async snapshot(name: string, selector?: string) {\n await this._page.evaluate(() => document.fonts.ready);\n\n const locator = this._page\n .locator(selector || \"[data-testid='component-example']\")\n .first();\n const box = await locator.boundingBox();\n\n if (!box) {\n return;\n }\n\n const screenshotRoot = `packages/jokul/src/components/${this.package}/integration/__screenshots__`;\n const testName = test.info().title.replaceAll(\" \", \"-\");\n const screenshotPath = `${screenshotRoot}/${testName}-${this.projectName}-${name}.png`;\n\n const hasScreenshot = existsSync(screenshotPath);\n\n if (hasScreenshot) {\n await expect(\n await this._page.screenshot({\n animations: \"disabled\",\n caret: \"hide\",\n clip: { ...box },\n }),\n ).toMatchSnapshot(`${this.projectName}-${name}`);\n } else {\n await this._page.screenshot({\n animations: \"disabled\",\n caret: \"hide\",\n clip: { ...box },\n path: screenshotPath,\n });\n }\n }\n\n async snapshots({\n before,\n after,\n selector,\n }: {\n before?: () => Promise<any>;\n after?: () => Promise<any>;\n selector?: string;\n } = {}) {\n await this.setDensity(\"default\");\n await this.setTheme(\"light\");\n await before?.();\n await this.snapshot(\"default\", selector);\n await after?.();\n\n await this.setDensity(\"default\");\n await this.setTheme(\"dark\");\n await before?.();\n await this.snapshot(\"default-dark\", selector);\n await after?.();\n\n await this.setDensity(\"compact\");\n await this.setTheme(\"light\");\n await before?.();\n await this.snapshot(\"compact-light\", selector);\n await after?.();\n\n await this.setDensity(\"compact\");\n await this.setTheme(\"dark\");\n await before?.();\n await this.snapshot(\"compact-dark\", selector);\n await after?.();\n }\n}\n","import { cpSync, existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nfunction copyJklFonts(destination) {\n return {\n name: \"copy-jkl-fonts\",\n configResolved() {\n const source = resolve(\n fileURLToPath(new URL(\".\", import.meta.url)),\n \"..\",\n \"..\",\n \"packages\",\n \"webfonts\",\n \"fonts\",\n );\n if (!existsSync(destination)) {\n cpSync(source, destination, {\n recursive: true,\n });\n console.log(`Copied font files into \"${destination}\"`);\n }\n },\n };\n}\n\nexport { copyJklFonts };\n"],"names":["setupDev","destination","name","buildStart","cpSync","resolve","fileURLToPath","URL","url","console","log","buildEnd","rmSync","TestHelper","constructor","args","__publicField","this","_page","page","package","projectName","emulateMedia","forcedColors","reducedMotion","async","server","createServer","mode","configFile","plugins","react","configResolved","source","existsSync","recursive","alias","root","define","__CI__","listen","config","port","_a","close","path","goto","selector","click","key","keyboard","press","testid","getByTestId","first","check","force","value","evaluate","document","fonts","ready","box","locator","boundingBox","screenshotRoot","screenshotPath","test","info","title","replaceAll","expect","screenshot","animations","caret","clip","toMatchSnapshot","before","after","setDensity","setTheme","snapshot"],"mappings":"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"}