@ds-mo/ui 14.13.0 → 14.14.0
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.
- package/dist/.package-ready.json +1 -1
- package/dist/agent-patterns.json +1 -1
- package/dist/agent.json +17 -4
- package/dist/angular/ds-input.d.ts +1 -1
- package/dist/angular/ds-input.js +3 -3
- package/dist/components/ds-input.js +1 -1
- package/dist/components/ds-paper-texture.js +1 -1
- package/dist/components/ds-shell-app.js +1 -1
- package/dist/components/ds-table-saved-views.js +1 -1
- package/dist/components/{p-DIEx1e0M.js → p-B80NfEqc.js} +2 -2
- package/dist/components/p-B80NfEqc.js.map +1 -0
- package/dist/components/{p-iBuPFJL9.js → p-CKY989vF.js} +2 -2
- package/dist/components/p-CKY989vF.js.map +1 -0
- package/dist/docs/components.json +86 -4
- package/dist/mcp-data/registry/input.json +55 -6
- package/dist/mcp-data/registry/paper-texture.json +1 -1
- package/dist/mcp-data/registry/registry.json +16 -3
- package/dist/types/components/Input/Input.d.ts +7 -1
- package/dist/types/components/PaperTexture/PaperTexture.d.ts +1 -0
- package/dist/types/components.d.ts +27 -0
- package/package.json +1 -1
- package/dist/components/p-DIEx1e0M.js.map +0 -1
- package/dist/components/p-iBuPFJL9.js.map +0 -1
|
@@ -1369,6 +1369,14 @@ export namespace Components {
|
|
|
1369
1369
|
* @default false
|
|
1370
1370
|
*/
|
|
1371
1371
|
"isInactive": boolean;
|
|
1372
|
+
/**
|
|
1373
|
+
* Maximum accepted value when type is number.
|
|
1374
|
+
*/
|
|
1375
|
+
"max": number | undefined;
|
|
1376
|
+
/**
|
|
1377
|
+
* Minimum accepted value when type is number.
|
|
1378
|
+
*/
|
|
1379
|
+
"min": number | undefined;
|
|
1372
1380
|
"name": string | undefined;
|
|
1373
1381
|
"placeholder": string | undefined;
|
|
1374
1382
|
/**
|
|
@@ -1390,6 +1398,10 @@ export namespace Components {
|
|
|
1390
1398
|
* @default 'md'
|
|
1391
1399
|
*/
|
|
1392
1400
|
"size": InputSize;
|
|
1401
|
+
/**
|
|
1402
|
+
* Numeric increment used by native stepping and constraint validation.
|
|
1403
|
+
*/
|
|
1404
|
+
"step": number | undefined;
|
|
1393
1405
|
/**
|
|
1394
1406
|
* @default 'text'
|
|
1395
1407
|
*/
|
|
@@ -6163,6 +6175,14 @@ declare namespace LocalJSX {
|
|
|
6163
6175
|
* @default false
|
|
6164
6176
|
*/
|
|
6165
6177
|
"isInactive"?: boolean;
|
|
6178
|
+
/**
|
|
6179
|
+
* Maximum accepted value when type is number.
|
|
6180
|
+
*/
|
|
6181
|
+
"max"?: number | undefined;
|
|
6182
|
+
/**
|
|
6183
|
+
* Minimum accepted value when type is number.
|
|
6184
|
+
*/
|
|
6185
|
+
"min"?: number | undefined;
|
|
6166
6186
|
"name"?: string | undefined;
|
|
6167
6187
|
"onDsChange"?: (event: DsInputCustomEvent<string>) => void;
|
|
6168
6188
|
"onDsClear"?: (event: DsInputCustomEvent<void>) => void;
|
|
@@ -6185,6 +6205,10 @@ declare namespace LocalJSX {
|
|
|
6185
6205
|
* @default 'md'
|
|
6186
6206
|
*/
|
|
6187
6207
|
"size"?: InputSize;
|
|
6208
|
+
/**
|
|
6209
|
+
* Numeric increment used by native stepping and constraint validation.
|
|
6210
|
+
*/
|
|
6211
|
+
"step"?: number | undefined;
|
|
6188
6212
|
/**
|
|
6189
6213
|
* @default 'text'
|
|
6190
6214
|
*/
|
|
@@ -8714,6 +8738,9 @@ declare namespace LocalJSX {
|
|
|
8714
8738
|
"clearLabel": string;
|
|
8715
8739
|
"placeholder": string | undefined;
|
|
8716
8740
|
"type": InputType;
|
|
8741
|
+
"min": number | undefined;
|
|
8742
|
+
"max": number | undefined;
|
|
8743
|
+
"step": number | undefined;
|
|
8717
8744
|
"autoComplete": string | undefined;
|
|
8718
8745
|
"inputMode": string;
|
|
8719
8746
|
"enterKeyHint": string;
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["vertexShaderSource","DEFAULT_MAX_PIXEL_COUNT","ShaderMount","parentElement","canvasElement","gl","program","uniformLocations","fragmentShader","rafId","lastRenderTime","currentFrame","speed","currentSpeed","providedUniforms","mipmaps","hasBeenDisposed","resolutionChanged","textures","Map","minPixelRatio","maxPixelCount","isSafari","uniformCache","textureUnitMap","ownerDocument","constructor","uniforms","webGlContextAttributes","frame","nodeType","this","Error","querySelector","styleElement","createElement","innerHTML","defaultStyle","setAttribute","head","prepend","getContext","initProgram","setupPositionAttribute","setupUniforms","setUniformValues","setupResizeObserver","visualViewport","addEventListener","handleVisualViewportChange","setupIntersectionObserver","setSpeed","paperShaderMount","handleDocumentVisibilityChange","createProgram","positionAttributeLocation","getAttribLocation","positionBuffer","createBuffer","bindBuffer","ARRAY_BUFFER","positions","bufferData","Float32Array","STATIC_DRAW","enableVertexAttribArray","vertexAttribPointer","FLOAT","u_time","getUniformLocation","u_pixelRatio","u_resolution","Object","entries","forEach","key","value","HTMLImageElement","aspectRatioUniformName","renderScale","parentWidth","parentHeight","parentDevicePixelWidth","parentDevicePixelHeight","devicePixelsSupported","intersectionObserver","isInViewport","resizeObserver","ResizeObserver","entry","borderBoxSize","physicalPixelSize","devicePixelContentBoxSize","inlineSize","blockSize","handleResize","observe","view","defaultView","IntersectionObserver","isIntersecting","updateCurrentSpeed","disconnect","targetPixelWidth","targetPixelHeight","dpr","Math","max","window","devicePixelRatio","pinchZoom","scale","scaleToMeetMinPixelRatio","targetRenderScale","zoomLevel","bestGuessBrowserZoom","round","maxPixelCountHeadroom","sqrt","scaleToMeetMaxPixelCount","min","newWidth","newHeight","newRenderScale","width","height","viewport","canvas","render","performance","now","currentTime","console","warn","dt","clear","COLOR_BUFFER_BIT","useProgram","uniform1f","uniform2f","drawArrays","TRIANGLES","requestRender","cancelAnimationFrame","requestAnimationFrame","setTextureUniform","uniformName","image","complete","naturalWidth","existingTexture","get","deleteTexture","has","set","size","textureUnit","activeTexture","TEXTURE0","texture","createTexture","bindTexture","TEXTURE_2D","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MIN_FILTER","LINEAR","TEXTURE_MAG_FILTER","texImage2D","RGBA","UNSIGNED_BYTE","includes","generateMipmap","LINEAR_MIPMAP_LINEAR","error","getError","NO_ERROR","location","uniform1i","aspectRatioLocation","aspectRatio","naturalHeight","areUniformValuesEqual","a","b","Array","isArray","length","every","val","i","updatedUniforms","cacheValue","src","slice","flatArray","valueLength","firstChildLength","arr","flat","uniform2fv","uniform3fv","uniform4fv","uniformMatrix3fv","uniformMatrix4fv","getCurrentFrame","setFrame","newFrame","newSpeed","setCurrentSpeed","hidden","setMaxPixelCount","newMaxPixelCount","setMinPixelRatio","newMinPixelRatio","setUniforms","newUniforms","dispose","deleteProgram","ELEMENT_ARRAY_BUFFER","bindRenderbuffer","RENDERBUFFER","bindFramebuffer","FRAMEBUFFER","removeEventListener","remove","createShader","type","source","shader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","deleteShader","vertexShaderSource2","fragmentShaderSource","format","getShaderPrecisionFormat","FRAGMENT_SHADER","MEDIUM_FLOAT","precision","replace","vertexShader","VERTEX_SHADER","attachShader","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","detachShader","ua","navigator","userAgent","toLowerCase","doc","viewportScale","viewportWidth","innerWidth","scrollbarWidth","documentElement","clientWidth","ratio","outerWidth","zoomPercentageRounded","ShaderFitOptions","none","contain","cover","declarePI","rotation2","textureRandomizerR","fiberNoise","paperTextureFragmentShader","getShaderColorFromString","colorString","fallbackColor","r","g","startsWith","hexToRgba","rgba","parseRgba","hsla","parseHsla","hslaToRgba","clamp","hex","split","map","char","join","test","parseInt","match","parseFloat","h","s","l","hDecimal","sDecimal","lDecimal","hue2rgb","p2","q2","t","q","p","n","getShaderNoiseTexture","img","Image","noiseSrc","emptyPixel","DEFAULT_PAPER_TEXTURE_CONFIG","colorFront","colorBack","contrast","roughness","fiber","fiberSize","crumples","crumpleSize","folds","foldCount","fade","drops","seed","fit","rotation","originX","originY","offsetX","offsetY","worldWidth","worldHeight","opacity","paperTextureCss","emptyPixelPromise","noiseTexturePromise","waitForImage","Promise","resolve","reject","onLoad","cleanup","onError","once","loadImage","crossOrigin","loadEmptyPixel","loadNoiseTexture","then","PaperTexture","__stencil_proxyCustomElement","HTMLElement","registerHost","config","syncGeneration","hasLoaded","componentDidLoad","syncShader","disconnectedCallback","disposeShader","onConfigChange","resolvedConfig","generation","noiseTexture","all","catch","el","isConnected","buildUniforms","mountElement","shaderMount","undefined","removeAttribute","replaceChildren","u_image","u_noiseTexture","u_colorFront","u_colorBack","u_contrast","u_roughness","u_fiber","u_fiberSize","u_crumples","u_crumpleSize","u_foldCount","u_folds","u_fade","u_drops","u_seed","u_fit","u_scale","u_rotation","u_offsetX","u_offsetY","u_originX","u_originY","u_worldWidth","u_worldHeight","Host","style","String","class"],"sources":["node_modules/@paper-design/shaders/dist/vertex-shader.js","node_modules/@paper-design/shaders/dist/shader-mount.js","node_modules/@paper-design/shaders/dist/shader-sizing.js","node_modules/@paper-design/shaders/dist/shader-utils.js","node_modules/@paper-design/shaders/dist/shaders/paper-texture.js","node_modules/@paper-design/shaders/dist/get-shader-color-from-string.js","node_modules/@paper-design/shaders/dist/get-shader-noise-texture.js","node_modules/@paper-design/shaders/dist/empty-pixel.js","src/wc/components/PaperTexture/paper-texture-types.ts","src/wc/components/PaperTexture/PaperTexture.css?tag=ds-paper-texture&encapsulation=scoped","src/wc/components/PaperTexture/PaperTexture.tsx"],"sourcesContent":["/* * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Paper Shaders *\n * https://github.com/paper-design/shaders *\n * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\nconst vertexShaderSource = `#version 300 es\nprecision mediump float;\n\nlayout(location = 0) in vec4 a_position;\n\nuniform vec2 u_resolution;\nuniform float u_pixelRatio;\nuniform float u_imageAspectRatio;\nuniform float u_originX;\nuniform float u_originY;\nuniform float u_worldWidth;\nuniform float u_worldHeight;\nuniform float u_fit;\nuniform float u_scale;\nuniform float u_rotation;\nuniform float u_offsetX;\nuniform float u_offsetY;\n\nout vec2 v_objectUV;\nout vec2 v_objectBoxSize;\nout vec2 v_responsiveUV;\nout vec2 v_responsiveBoxGivenSize;\nout vec2 v_patternUV;\nout vec2 v_patternBoxSize;\nout vec2 v_imageUV;\n\nvec3 getBoxSize(float boxRatio, vec2 givenBoxSize) {\n vec2 box = vec2(0.);\n // fit = none\n box.x = boxRatio * min(givenBoxSize.x / boxRatio, givenBoxSize.y);\n float noFitBoxWidth = box.x;\n if (u_fit == 1.) { // fit = contain\n box.x = boxRatio * min(u_resolution.x / boxRatio, u_resolution.y);\n } else if (u_fit == 2.) { // fit = cover\n box.x = boxRatio * max(u_resolution.x / boxRatio, u_resolution.y);\n }\n box.y = box.x / boxRatio;\n return vec3(box, noFitBoxWidth);\n}\n\nvoid main() {\n gl_Position = a_position;\n\n vec2 uv = gl_Position.xy * .5;\n vec2 boxOrigin = vec2(.5 - u_originX, u_originY - .5);\n vec2 givenBoxSize = vec2(u_worldWidth, u_worldHeight);\n givenBoxSize = max(givenBoxSize, vec2(1.)) * u_pixelRatio;\n float r = u_rotation * 3.14159265358979323846 / 180.;\n mat2 graphicRotation = mat2(cos(r), sin(r), -sin(r), cos(r));\n vec2 graphicOffset = vec2(-u_offsetX, u_offsetY);\n\n\n // ===================================================\n\n float fixedRatio = 1.;\n vec2 fixedRatioBoxGivenSize = vec2(\n (u_worldWidth == 0.) ? u_resolution.x : givenBoxSize.x,\n (u_worldHeight == 0.) ? u_resolution.y : givenBoxSize.y\n );\n\n v_objectBoxSize = getBoxSize(fixedRatio, fixedRatioBoxGivenSize).xy;\n vec2 objectWorldScale = u_resolution.xy / v_objectBoxSize;\n\n v_objectUV = uv;\n v_objectUV *= objectWorldScale;\n v_objectUV += boxOrigin * (objectWorldScale - 1.);\n v_objectUV += graphicOffset;\n v_objectUV /= u_scale;\n v_objectUV = graphicRotation * v_objectUV;\n\n // ===================================================\n\n v_responsiveBoxGivenSize = vec2(\n (u_worldWidth == 0.) ? u_resolution.x : givenBoxSize.x,\n (u_worldHeight == 0.) ? u_resolution.y : givenBoxSize.y\n );\n float responsiveRatio = v_responsiveBoxGivenSize.x / v_responsiveBoxGivenSize.y;\n vec2 responsiveBoxSize = getBoxSize(responsiveRatio, v_responsiveBoxGivenSize).xy;\n vec2 responsiveBoxScale = u_resolution.xy / responsiveBoxSize;\n\n #ifdef ADD_HELPERS\n v_responsiveHelperBox = uv;\n v_responsiveHelperBox *= responsiveBoxScale;\n v_responsiveHelperBox += boxOrigin * (responsiveBoxScale - 1.);\n #endif\n\n v_responsiveUV = uv;\n v_responsiveUV *= responsiveBoxScale;\n v_responsiveUV += boxOrigin * (responsiveBoxScale - 1.);\n v_responsiveUV += graphicOffset;\n v_responsiveUV /= u_scale;\n v_responsiveUV.x *= responsiveRatio;\n v_responsiveUV = graphicRotation * v_responsiveUV;\n v_responsiveUV.x /= responsiveRatio;\n\n // ===================================================\n\n float patternBoxRatio = givenBoxSize.x / givenBoxSize.y;\n vec2 patternBoxGivenSize = vec2(\n (u_worldWidth == 0.) ? u_resolution.x : givenBoxSize.x,\n (u_worldHeight == 0.) ? u_resolution.y : givenBoxSize.y\n );\n patternBoxRatio = patternBoxGivenSize.x / patternBoxGivenSize.y;\n\n vec3 boxSizeData = getBoxSize(patternBoxRatio, patternBoxGivenSize);\n v_patternBoxSize = boxSizeData.xy;\n float patternBoxNoFitBoxWidth = boxSizeData.z;\n vec2 patternBoxScale = u_resolution.xy / v_patternBoxSize;\n\n v_patternUV = uv;\n v_patternUV += graphicOffset / patternBoxScale;\n v_patternUV += boxOrigin;\n v_patternUV -= boxOrigin / patternBoxScale;\n v_patternUV *= u_resolution.xy;\n v_patternUV /= u_pixelRatio;\n if (u_fit > 0.) {\n v_patternUV *= (patternBoxNoFitBoxWidth / v_patternBoxSize.x);\n }\n v_patternUV /= u_scale;\n v_patternUV = graphicRotation * v_patternUV;\n v_patternUV += boxOrigin / patternBoxScale;\n v_patternUV -= boxOrigin;\n // x100 is a default multiplier between vertex and fragmant shaders\n // we use it to avoid UV presision issues\n v_patternUV *= .01;\n\n // ===================================================\n\n vec2 imageBoxSize;\n if (u_fit == 1.) { // contain\n imageBoxSize.x = min(u_resolution.x / u_imageAspectRatio, u_resolution.y) * u_imageAspectRatio;\n } else if (u_fit == 2.) { // cover\n imageBoxSize.x = max(u_resolution.x / u_imageAspectRatio, u_resolution.y) * u_imageAspectRatio;\n } else {\n imageBoxSize.x = min(10.0, 10.0 / u_imageAspectRatio * u_imageAspectRatio);\n }\n imageBoxSize.y = imageBoxSize.x / u_imageAspectRatio;\n vec2 imageBoxScale = u_resolution.xy / imageBoxSize;\n\n v_imageUV = uv;\n v_imageUV *= imageBoxScale;\n v_imageUV += boxOrigin * (imageBoxScale - 1.);\n v_imageUV += graphicOffset;\n v_imageUV /= u_scale;\n v_imageUV.x *= u_imageAspectRatio;\n v_imageUV = graphicRotation * v_imageUV;\n v_imageUV.x /= u_imageAspectRatio;\n\n v_imageUV += .5;\n v_imageUV.y = 1. - v_imageUV.y;\n}`;\nexport {\n vertexShaderSource\n};\n//# sourceMappingURL=vertex-shader.js.map\n","/* * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Paper Shaders *\n * https://github.com/paper-design/shaders *\n * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\nimport { vertexShaderSource } from \"./vertex-shader.js\";\nconst DEFAULT_MAX_PIXEL_COUNT = 1920 * 1080 * 4;\nclass ShaderMount {\n parentElement;\n canvasElement;\n gl;\n program = null;\n uniformLocations = {};\n /** The fragment shader that we are using */\n fragmentShader;\n /** Stores the RAF for the render loop */\n rafId = null;\n /** Time of the last rendered frame */\n lastRenderTime = 0;\n /** Total time that we have played any animation, passed as a uniform to the shader for time-based VFX */\n currentFrame = 0;\n /** The speed that we progress through animation time (multiplies by delta time every update). Allows negatives to play in reverse. If set to 0, rAF will stop entirely so static shaders have no recurring performance costs */\n speed = 0;\n /** Actual speed used that accounts for visibility: we pause the shader if the tab is hidden or the element out of the viewport */\n currentSpeed = 0;\n /** Uniforms that are provided by the user for the specific shader being mounted (not including uniforms that this Mount adds, like time and resolution) */\n providedUniforms;\n /** Names of the uniforms that should have mipmaps generated for them */\n mipmaps = [];\n /** Just a sanity check to make sure frames don't run after we're disposed */\n hasBeenDisposed = false;\n /** If the resolution of the canvas has changed since the last render */\n resolutionChanged = true;\n /** Store textures that are provided by the user */\n textures = /* @__PURE__ */ new Map();\n minPixelRatio;\n maxPixelCount;\n isSafari = isSafari();\n uniformCache = {};\n textureUnitMap = /* @__PURE__ */ new Map();\n ownerDocument;\n constructor(parentElement, fragmentShader, uniforms, webGlContextAttributes, speed = 0, frame = 0, minPixelRatio = 2, maxPixelCount = DEFAULT_MAX_PIXEL_COUNT, mipmaps = []) {\n if (parentElement?.nodeType === 1) {\n this.parentElement = parentElement;\n } else {\n throw new Error(\"Paper Shaders: parent element must be an HTMLElement\");\n }\n this.ownerDocument = parentElement.ownerDocument;\n if (!this.ownerDocument.querySelector(\"style[data-paper-shader]\")) {\n const styleElement = this.ownerDocument.createElement(\"style\");\n styleElement.innerHTML = defaultStyle;\n styleElement.setAttribute(\"data-paper-shader\", \"\");\n this.ownerDocument.head.prepend(styleElement);\n }\n const canvasElement = this.ownerDocument.createElement(\"canvas\");\n this.canvasElement = canvasElement;\n this.parentElement.prepend(canvasElement);\n this.fragmentShader = fragmentShader;\n this.providedUniforms = uniforms;\n this.mipmaps = mipmaps;\n this.currentFrame = frame;\n this.minPixelRatio = minPixelRatio;\n this.maxPixelCount = maxPixelCount;\n const gl = canvasElement.getContext(\"webgl2\", webGlContextAttributes);\n if (!gl) {\n throw new Error(\"Paper Shaders: WebGL is not supported in this browser\");\n }\n this.gl = gl;\n this.initProgram();\n this.setupPositionAttribute();\n this.setupUniforms();\n this.setUniformValues(this.providedUniforms);\n this.setupResizeObserver();\n visualViewport?.addEventListener(\"resize\", this.handleVisualViewportChange);\n this.setupIntersectionObserver();\n this.setSpeed(speed);\n this.parentElement.setAttribute(\"data-paper-shader\", \"\");\n this.parentElement.paperShaderMount = this;\n this.ownerDocument.addEventListener(\"visibilitychange\", this.handleDocumentVisibilityChange);\n }\n initProgram = () => {\n const program = createProgram(this.gl, vertexShaderSource, this.fragmentShader);\n if (!program) return;\n this.program = program;\n };\n setupPositionAttribute = () => {\n const positionAttributeLocation = this.gl.getAttribLocation(this.program, \"a_position\");\n const positionBuffer = this.gl.createBuffer();\n this.gl.bindBuffer(this.gl.ARRAY_BUFFER, positionBuffer);\n const positions = [-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1];\n this.gl.bufferData(this.gl.ARRAY_BUFFER, new Float32Array(positions), this.gl.STATIC_DRAW);\n this.gl.enableVertexAttribArray(positionAttributeLocation);\n this.gl.vertexAttribPointer(positionAttributeLocation, 2, this.gl.FLOAT, false, 0, 0);\n };\n setupUniforms = () => {\n const uniformLocations = {\n u_time: this.gl.getUniformLocation(this.program, \"u_time\"),\n u_pixelRatio: this.gl.getUniformLocation(this.program, \"u_pixelRatio\"),\n u_resolution: this.gl.getUniformLocation(this.program, \"u_resolution\")\n };\n Object.entries(this.providedUniforms).forEach(([key, value]) => {\n uniformLocations[key] = this.gl.getUniformLocation(this.program, key);\n if (value instanceof HTMLImageElement) {\n const aspectRatioUniformName = `${key}AspectRatio`;\n uniformLocations[aspectRatioUniformName] = this.gl.getUniformLocation(this.program, aspectRatioUniformName);\n }\n });\n this.uniformLocations = uniformLocations;\n };\n /**\n * The scale that we should render at.\n * - Used to target 2x rendering even on 1x screens for better antialiasing\n * - Prevents the virtual resolution from going beyond the maximum resolution\n * - Accounts for the page zoom level so we render in physical device pixels rather than CSS pixels\n */\n renderScale = 1;\n parentWidth = 0;\n parentHeight = 0;\n parentDevicePixelWidth = 0;\n parentDevicePixelHeight = 0;\n devicePixelsSupported = false;\n intersectionObserver = null;\n isInViewport = true;\n resizeObserver = null;\n setupResizeObserver = () => {\n this.resizeObserver = new ResizeObserver(([entry]) => {\n if (entry?.borderBoxSize[0]) {\n const physicalPixelSize = entry.devicePixelContentBoxSize?.[0];\n if (physicalPixelSize !== void 0) {\n this.devicePixelsSupported = true;\n this.parentDevicePixelWidth = physicalPixelSize.inlineSize;\n this.parentDevicePixelHeight = physicalPixelSize.blockSize;\n }\n this.parentWidth = entry.borderBoxSize[0].inlineSize;\n this.parentHeight = entry.borderBoxSize[0].blockSize;\n }\n this.handleResize();\n });\n this.resizeObserver.observe(this.parentElement);\n };\n setupIntersectionObserver = () => {\n const view = this.ownerDocument.defaultView;\n if (!view?.IntersectionObserver) return;\n this.intersectionObserver = new view.IntersectionObserver(([entry]) => {\n this.isInViewport = entry?.isIntersecting ?? true;\n this.updateCurrentSpeed();\n });\n this.intersectionObserver.observe(this.parentElement);\n };\n // Visual viewport resize handler, mainly used to react to browser zoom changes.\n // Resize observer by itself does not react to pinch zoom, and although it usually\n // reacts to classic browser zoom, it's not guaranteed in edge cases.\n // Since timing between visual viewport changes and resize observer is complex\n // and because we'd like to know the device pixel sizes of elements, we just restart\n // the observer to get a guaranteed fresh callback regardless if it would have triggered or not.\n handleVisualViewportChange = () => {\n this.resizeObserver?.disconnect();\n this.setupResizeObserver();\n };\n /** Resize handler for when the container div changes size or the max pixel count changes and we want to resize our canvas to match */\n handleResize = () => {\n let targetPixelWidth = 0;\n let targetPixelHeight = 0;\n const dpr = Math.max(1, window.devicePixelRatio);\n const pinchZoom = visualViewport?.scale ?? 1;\n if (this.devicePixelsSupported) {\n const scaleToMeetMinPixelRatio = Math.max(1, this.minPixelRatio / dpr);\n targetPixelWidth = this.parentDevicePixelWidth * scaleToMeetMinPixelRatio * pinchZoom;\n targetPixelHeight = this.parentDevicePixelHeight * scaleToMeetMinPixelRatio * pinchZoom;\n } else {\n let targetRenderScale = Math.max(dpr, this.minPixelRatio) * pinchZoom;\n if (this.isSafari) {\n const zoomLevel = bestGuessBrowserZoom(this.ownerDocument);\n targetRenderScale *= Math.max(1, zoomLevel);\n }\n targetPixelWidth = Math.round(this.parentWidth) * targetRenderScale;\n targetPixelHeight = Math.round(this.parentHeight) * targetRenderScale;\n }\n const maxPixelCountHeadroom = Math.sqrt(this.maxPixelCount) / Math.sqrt(targetPixelWidth * targetPixelHeight);\n const scaleToMeetMaxPixelCount = Math.min(1, maxPixelCountHeadroom);\n const newWidth = Math.round(targetPixelWidth * scaleToMeetMaxPixelCount);\n const newHeight = Math.round(targetPixelHeight * scaleToMeetMaxPixelCount);\n const newRenderScale = newWidth / Math.round(this.parentWidth);\n if (this.canvasElement.width !== newWidth || this.canvasElement.height !== newHeight || this.renderScale !== newRenderScale) {\n this.renderScale = newRenderScale;\n this.canvasElement.width = newWidth;\n this.canvasElement.height = newHeight;\n this.resolutionChanged = true;\n this.gl.viewport(0, 0, this.gl.canvas.width, this.gl.canvas.height);\n this.render(performance.now());\n }\n };\n render = (currentTime) => {\n if (this.hasBeenDisposed) return;\n if (this.program === null) {\n console.warn(\"Tried to render before program or gl was initialized\");\n return;\n }\n const dt = currentTime - this.lastRenderTime;\n this.lastRenderTime = currentTime;\n if (this.currentSpeed !== 0) {\n this.currentFrame += dt * this.currentSpeed;\n }\n this.gl.clear(this.gl.COLOR_BUFFER_BIT);\n this.gl.useProgram(this.program);\n this.gl.uniform1f(this.uniformLocations.u_time, this.currentFrame * 1e-3);\n if (this.resolutionChanged) {\n this.gl.uniform2f(this.uniformLocations.u_resolution, this.gl.canvas.width, this.gl.canvas.height);\n this.gl.uniform1f(this.uniformLocations.u_pixelRatio, this.renderScale);\n this.resolutionChanged = false;\n }\n this.gl.drawArrays(this.gl.TRIANGLES, 0, 6);\n if (this.currentSpeed !== 0) {\n this.requestRender();\n } else {\n this.rafId = null;\n }\n };\n requestRender = () => {\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId);\n }\n this.rafId = requestAnimationFrame(this.render);\n };\n /** Creates a texture from an image and sets it into a uniform value */\n setTextureUniform = (uniformName, image) => {\n if (!image.complete || image.naturalWidth === 0) {\n throw new Error(`Paper Shaders: image for uniform ${uniformName} must be fully loaded`);\n }\n const existingTexture = this.textures.get(uniformName);\n if (existingTexture) {\n this.gl.deleteTexture(existingTexture);\n }\n if (!this.textureUnitMap.has(uniformName)) {\n this.textureUnitMap.set(uniformName, this.textureUnitMap.size);\n }\n const textureUnit = this.textureUnitMap.get(uniformName);\n this.gl.activeTexture(this.gl.TEXTURE0 + textureUnit);\n const texture = this.gl.createTexture();\n this.gl.bindTexture(this.gl.TEXTURE_2D, texture);\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_S, this.gl.CLAMP_TO_EDGE);\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_T, this.gl.CLAMP_TO_EDGE);\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MIN_FILTER, this.gl.LINEAR);\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MAG_FILTER, this.gl.LINEAR);\n this.gl.texImage2D(this.gl.TEXTURE_2D, 0, this.gl.RGBA, this.gl.RGBA, this.gl.UNSIGNED_BYTE, image);\n if (this.mipmaps.includes(uniformName)) {\n this.gl.generateMipmap(this.gl.TEXTURE_2D);\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MIN_FILTER, this.gl.LINEAR_MIPMAP_LINEAR);\n }\n const error = this.gl.getError();\n if (error !== this.gl.NO_ERROR || texture === null) {\n console.error(\"Paper Shaders: WebGL error when uploading texture:\", error);\n return;\n }\n this.textures.set(uniformName, texture);\n const location = this.uniformLocations[uniformName];\n if (location) {\n this.gl.uniform1i(location, textureUnit);\n const aspectRatioUniformName = `${uniformName}AspectRatio`;\n const aspectRatioLocation = this.uniformLocations[aspectRatioUniformName];\n if (aspectRatioLocation) {\n const aspectRatio = image.naturalWidth / image.naturalHeight;\n this.gl.uniform1f(aspectRatioLocation, aspectRatio);\n }\n }\n };\n /** Utility: recursive equality test for all the uniforms */\n areUniformValuesEqual = (a, b) => {\n if (a === b) return true;\n if (Array.isArray(a) && Array.isArray(b) && a.length === b.length) {\n return a.every((val, i) => this.areUniformValuesEqual(val, b[i]));\n }\n return false;\n };\n /** Sets the provided uniform values into the WebGL program, can be a partial list of uniforms that have changed */\n setUniformValues = (updatedUniforms) => {\n this.gl.useProgram(this.program);\n Object.entries(updatedUniforms).forEach(([key, value]) => {\n let cacheValue = value;\n if (value instanceof HTMLImageElement) {\n cacheValue = `${value.src.slice(0, 200)}|${value.naturalWidth}x${value.naturalHeight}`;\n }\n if (this.areUniformValuesEqual(this.uniformCache[key], cacheValue)) return;\n this.uniformCache[key] = cacheValue;\n const location = this.uniformLocations[key];\n if (!location) {\n console.warn(`Uniform location for ${key} not found`);\n return;\n }\n if (value instanceof HTMLImageElement) {\n this.setTextureUniform(key, value);\n } else if (Array.isArray(value)) {\n let flatArray = null;\n let valueLength = null;\n if (value[0] !== void 0 && Array.isArray(value[0])) {\n const firstChildLength = value[0].length;\n if (value.every((arr) => arr.length === firstChildLength)) {\n flatArray = value.flat();\n valueLength = firstChildLength;\n } else {\n console.warn(`All child arrays must be the same length for ${key}`);\n return;\n }\n } else {\n flatArray = value;\n valueLength = flatArray.length;\n }\n switch (valueLength) {\n case 2:\n this.gl.uniform2fv(location, flatArray);\n break;\n case 3:\n this.gl.uniform3fv(location, flatArray);\n break;\n case 4:\n this.gl.uniform4fv(location, flatArray);\n break;\n case 9:\n this.gl.uniformMatrix3fv(location, false, flatArray);\n break;\n case 16:\n this.gl.uniformMatrix4fv(location, false, flatArray);\n break;\n default:\n console.warn(`Unsupported uniform array length: ${valueLength}`);\n }\n } else if (typeof value === \"number\") {\n this.gl.uniform1f(location, value);\n } else if (typeof value === \"boolean\") {\n this.gl.uniform1i(location, value ? 1 : 0);\n } else {\n console.warn(`Unsupported uniform type for ${key}: ${typeof value}`);\n }\n });\n };\n /** Gets the current total animation time from 0ms */\n getCurrentFrame = () => {\n return this.currentFrame;\n };\n /** Set a frame to get a deterministic result, frames are literally just milliseconds from zero since the animation started */\n setFrame = (newFrame) => {\n this.currentFrame = newFrame;\n this.lastRenderTime = performance.now();\n this.render(performance.now());\n };\n /** Set an animation speed (or 0 to stop animation) */\n setSpeed = (newSpeed = 1) => {\n this.speed = newSpeed;\n this.updateCurrentSpeed();\n };\n /** Apply the target speed, pausing (0) while the tab is hidden or the element is out of the viewport */\n updateCurrentSpeed = () => {\n this.setCurrentSpeed(this.ownerDocument.hidden || !this.isInViewport ? 0 : this.speed);\n };\n setCurrentSpeed = (newSpeed) => {\n this.currentSpeed = newSpeed;\n if (this.rafId === null && newSpeed !== 0) {\n this.lastRenderTime = performance.now();\n this.rafId = requestAnimationFrame(this.render);\n }\n if (this.rafId !== null && newSpeed === 0) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n };\n /** Set the maximum pixel count for the shader, this will limit the number of pixels that will be rendered */\n setMaxPixelCount = (newMaxPixelCount = DEFAULT_MAX_PIXEL_COUNT) => {\n this.maxPixelCount = newMaxPixelCount;\n this.handleResize();\n };\n /** Set the minimum pixel ratio for the shader */\n setMinPixelRatio = (newMinPixelRatio = 2) => {\n this.minPixelRatio = newMinPixelRatio;\n this.handleResize();\n };\n /** Update the uniforms that are provided by the outside shader, can be a partial set with only the uniforms that have changed */\n setUniforms = (newUniforms) => {\n this.setUniformValues(newUniforms);\n this.providedUniforms = { ...this.providedUniforms, ...newUniforms };\n this.render(performance.now());\n };\n handleDocumentVisibilityChange = () => {\n this.updateCurrentSpeed();\n };\n /** Dispose of the shader mount, cleaning up all of the WebGL resources */\n dispose = () => {\n this.hasBeenDisposed = true;\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n if (this.gl && this.program) {\n this.textures.forEach((texture) => {\n this.gl.deleteTexture(texture);\n });\n this.textures.clear();\n this.gl.deleteProgram(this.program);\n this.program = null;\n this.gl.bindBuffer(this.gl.ARRAY_BUFFER, null);\n this.gl.bindBuffer(this.gl.ELEMENT_ARRAY_BUFFER, null);\n this.gl.bindRenderbuffer(this.gl.RENDERBUFFER, null);\n this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, null);\n this.gl.getError();\n }\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n if (this.intersectionObserver) {\n this.intersectionObserver.disconnect();\n this.intersectionObserver = null;\n }\n visualViewport?.removeEventListener(\"resize\", this.handleVisualViewportChange);\n this.ownerDocument.removeEventListener(\"visibilitychange\", this.handleDocumentVisibilityChange);\n this.uniformLocations = {};\n this.canvasElement.remove();\n delete this.parentElement.paperShaderMount;\n };\n}\nfunction createShader(gl, type, source) {\n const shader = gl.createShader(type);\n if (!shader) return null;\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n console.error(\"An error occurred compiling the shaders: \" + gl.getShaderInfoLog(shader));\n gl.deleteShader(shader);\n return null;\n }\n return shader;\n}\nfunction createProgram(gl, vertexShaderSource2, fragmentShaderSource) {\n const format = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT);\n const precision = format ? format.precision : null;\n if (precision && precision < 23) {\n vertexShaderSource2 = vertexShaderSource2.replace(/precision\\s+(lowp|mediump)\\s+float;/g, \"precision highp float;\");\n fragmentShaderSource = fragmentShaderSource.replace(/precision\\s+(lowp|mediump)\\s+float/g, \"precision highp float\").replace(/\\b(uniform|varying|attribute)\\s+(lowp|mediump)\\s+(\\w+)/g, \"$1 highp $3\");\n }\n const vertexShader = createShader(gl, gl.VERTEX_SHADER, vertexShaderSource2);\n const fragmentShader = createShader(gl, gl.FRAGMENT_SHADER, fragmentShaderSource);\n if (!vertexShader || !fragmentShader) return null;\n const program = gl.createProgram();\n if (!program) return null;\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n console.error(\"Unable to initialize the shader program: \" + gl.getProgramInfoLog(program));\n gl.deleteProgram(program);\n gl.deleteShader(vertexShader);\n gl.deleteShader(fragmentShader);\n return null;\n }\n gl.detachShader(program, vertexShader);\n gl.detachShader(program, fragmentShader);\n gl.deleteShader(vertexShader);\n gl.deleteShader(fragmentShader);\n return program;\n}\nconst defaultStyle = `@layer paper-shaders {\n :where([data-paper-shader]) {\n isolation: isolate;\n position: relative;\n\n & canvas {\n contain: strict;\n display: block;\n position: absolute;\n inset: 0;\n z-index: -1;\n width: 100%;\n height: 100%;\n border-radius: inherit;\n corner-shape: inherit;\n }\n }\n}`;\nfunction isPaperShaderElement(element) {\n return \"paperShaderMount\" in element;\n}\nfunction isSafari() {\n const ua = navigator.userAgent.toLowerCase();\n return ua.includes(\"safari\") && !ua.includes(\"chrome\") && !ua.includes(\"android\");\n}\nfunction bestGuessBrowserZoom(doc) {\n const viewportScale = visualViewport?.scale ?? 1;\n const viewportWidth = visualViewport?.width ?? window.innerWidth;\n const scrollbarWidth = window.innerWidth - doc.documentElement.clientWidth;\n const innerWidth = viewportScale * viewportWidth + scrollbarWidth;\n const ratio = outerWidth / innerWidth;\n const zoomPercentageRounded = Math.round(100 * ratio);\n if (zoomPercentageRounded % 5 === 0) {\n return zoomPercentageRounded / 100;\n }\n if (zoomPercentageRounded === 33) {\n return 1 / 3;\n }\n if (zoomPercentageRounded === 67) {\n return 2 / 3;\n }\n if (zoomPercentageRounded === 133) {\n return 4 / 3;\n }\n return ratio;\n}\nexport {\n ShaderMount,\n isPaperShaderElement\n};\n//# sourceMappingURL=shader-mount.js.map\n","/* * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Paper Shaders *\n * https://github.com/paper-design/shaders *\n * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\nconst defaultObjectSizing = {\n fit: \"contain\",\n scale: 1,\n rotation: 0,\n offsetX: 0,\n offsetY: 0,\n originX: 0.5,\n originY: 0.5,\n worldWidth: 0,\n worldHeight: 0\n};\nconst defaultPatternSizing = {\n fit: \"none\",\n scale: 1,\n rotation: 0,\n offsetX: 0,\n offsetY: 0,\n originX: 0.5,\n originY: 0.5,\n worldWidth: 0,\n worldHeight: 0\n};\nconst ShaderFitOptions = {\n none: 0,\n contain: 1,\n cover: 2\n};\nexport {\n ShaderFitOptions,\n defaultObjectSizing,\n defaultPatternSizing\n};\n//# sourceMappingURL=shader-sizing.js.map\n","/* * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Paper Shaders *\n * https://github.com/paper-design/shaders *\n * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\nconst declarePI = `\n#define TWO_PI 6.28318530718\n#define PI 3.14159265358979323846\n`;\nconst rotation2 = `\nvec2 rotate(vec2 uv, float th) {\n return mat2(cos(th), sin(th), -sin(th), cos(th)) * uv;\n}\n`;\nconst proceduralHash11 = `\n float hash11(float p) {\n p = fract(p * 0.3183099) + 0.1;\n p *= p + 19.19;\n return fract(p * p);\n }\n`;\nconst proceduralHash21 = `\n float hash21(vec2 p) {\n p = fract(p * vec2(0.3183099, 0.3678794)) + 0.1;\n p += dot(p, p + 19.19);\n return fract(p.x * p.y);\n }\n`;\nconst proceduralHash22 = `\n vec2 hash22(vec2 p) {\n p = fract(p * vec2(0.3183099, 0.3678794)) + 0.1;\n p += dot(p, p.yx + 19.19);\n return fract(vec2(p.x * p.y, p.x + p.y));\n }\n`;\nconst textureRandomizerR = `\n float randomR(vec2 p) {\n vec2 uv = floor(p) / 100. + .5;\n return texture(u_noiseTexture, fract(uv)).r;\n }\n`;\nconst textureRandomizerGB = `\n vec2 randomGB(vec2 p) {\n vec2 uv = floor(p) / 100. + .5;\n return texture(u_noiseTexture, fract(uv)).gb;\n }\n`;\nconst colorBandingFix = `\n color += 1. / 256. * (fract(sin(dot(.014 * gl_FragCoord.xy, vec2(12.9898, 78.233))) * 43758.5453123) - .5);\n`;\nconst simplexNoise = `\nvec3 permute(vec3 x) { return mod(((x * 34.0) + 1.0) * x, 289.0); }\nfloat snoise(vec2 v) {\n const vec4 C = vec4(0.211324865405187, 0.366025403784439,\n -0.577350269189626, 0.024390243902439);\n vec2 i = floor(v + dot(v, C.yy));\n vec2 x0 = v - i + dot(i, C.xx);\n vec2 i1;\n i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);\n vec4 x12 = x0.xyxy + C.xxzz;\n x12.xy -= i1;\n i = mod(i, 289.0);\n vec3 p = permute(permute(i.y + vec3(0.0, i1.y, 1.0))\n + i.x + vec3(0.0, i1.x, 1.0));\n vec3 m = max(0.5 - vec3(dot(x0, x0), dot(x12.xy, x12.xy),\n dot(x12.zw, x12.zw)), 0.0);\n m = m * m;\n m = m * m;\n vec3 x = 2.0 * fract(p * C.www) - 1.0;\n vec3 h = abs(x) - 0.5;\n vec3 ox = floor(x + 0.5);\n vec3 a0 = x - ox;\n m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h);\n vec3 g;\n g.x = a0.x * x0.x + h.x * x0.y;\n g.yz = a0.yz * x12.xz + h.yz * x12.yw;\n return 130.0 * dot(m, g);\n}\n`;\nconst fiberNoise = `\nfloat fiberRandom(vec2 p) {\n vec2 uv = floor(p) / 100.;\n return texture(u_noiseTexture, fract(uv)).b;\n}\n\nfloat fiberValueNoise(vec2 st) {\n vec2 i = floor(st);\n vec2 f = fract(st);\n float a = fiberRandom(i);\n float b = fiberRandom(i + vec2(1.0, 0.0));\n float c = fiberRandom(i + vec2(0.0, 1.0));\n float d = fiberRandom(i + vec2(1.0, 1.0));\n vec2 u = f * f * (3.0 - 2.0 * f);\n float x1 = mix(a, b, u.x);\n float x2 = mix(c, d, u.x);\n return mix(x1, x2, u.y);\n}\n\nfloat fiberNoiseFbm(in vec2 n, vec2 seedOffset) {\n float total = 0.0, amplitude = 1.;\n for (int i = 0; i < 4; i++) {\n n = rotate(n, .7);\n total += fiberValueNoise(n + seedOffset) * amplitude;\n n *= 2.;\n amplitude *= 0.6;\n }\n return total;\n}\n\nfloat fiberNoise(vec2 uv, vec2 seedOffset) {\n float epsilon = 0.001;\n float n1 = fiberNoiseFbm(uv + vec2(epsilon, 0.0), seedOffset);\n float n2 = fiberNoiseFbm(uv - vec2(epsilon, 0.0), seedOffset);\n float n3 = fiberNoiseFbm(uv + vec2(0.0, epsilon), seedOffset);\n float n4 = fiberNoiseFbm(uv - vec2(0.0, epsilon), seedOffset);\n return length(vec2(n1 - n2, n3 - n4)) / (2.0 * epsilon);\n}\n`;\nexport {\n colorBandingFix,\n declarePI,\n fiberNoise,\n proceduralHash11,\n proceduralHash21,\n proceduralHash22,\n rotation2,\n simplexNoise,\n textureRandomizerGB,\n textureRandomizerR\n};\n//# sourceMappingURL=shader-utils.js.map\n","/* * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Paper Shaders *\n * https://github.com/paper-design/shaders *\n * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\nimport {} from \"../shader-sizing.js\";\nimport { rotation2, declarePI, fiberNoise, textureRandomizerR } from \"../shader-utils.js\";\nconst paperTextureFragmentShader = `#version 300 es\nprecision mediump float;\n\nuniform vec2 u_resolution;\nuniform float u_pixelRatio;\n\nuniform vec4 u_colorFront;\nuniform vec4 u_colorBack;\n\nuniform sampler2D u_image;\nuniform float u_imageAspectRatio;\n\nuniform float u_contrast;\nuniform float u_roughness;\nuniform float u_fiber;\nuniform float u_fiberSize;\nuniform float u_crumples;\nuniform float u_crumpleSize;\nuniform float u_folds;\nuniform float u_foldCount;\nuniform float u_drops;\nuniform float u_seed;\nuniform float u_fade;\n\nuniform sampler2D u_noiseTexture;\n\nin vec2 v_imageUV;\n\nout vec4 fragColor;\n\nfloat getUvFrame(vec2 uv) {\n float aax = 2. * fwidth(uv.x);\n float aay = 2. * fwidth(uv.y);\n\n float left = smoothstep(0., aax, uv.x);\n float right = 1. - smoothstep(1. - aax, 1., uv.x);\n float bottom = smoothstep(0., aay, uv.y);\n float top = 1. - smoothstep(1. - aay, 1., uv.y);\n\n return left * right * bottom * top;\n}\n\n${declarePI}\n${rotation2}\n${textureRandomizerR}\nfloat valueNoise(vec2 st) {\n vec2 i = floor(st);\n vec2 f = fract(st);\n float a = randomR(i);\n float b = randomR(i + vec2(1.0, 0.0));\n float c = randomR(i + vec2(0.0, 1.0));\n float d = randomR(i + vec2(1.0, 1.0));\n vec2 u = f * f * (3.0 - 2.0 * f);\n float x1 = mix(a, b, u.x);\n float x2 = mix(c, d, u.x);\n return mix(x1, x2, u.y);\n}\nfloat fbm(vec2 n) {\n float total = 0.0, amplitude = .4;\n for (int i = 0; i < 3; i++) {\n total += valueNoise(n) * amplitude;\n n *= 1.99;\n amplitude *= 0.65;\n }\n return total;\n}\n\n\nfloat randomG(vec2 p) {\n vec2 uv = floor(p) / 50. + .5;\n return texture(u_noiseTexture, fract(uv)).g;\n}\nfloat roughness(vec2 p) {\n p *= .1;\n float o = 0.;\n for (float i = 0.; ++i < 4.; p *= 2.1) {\n vec4 w = vec4(floor(p), ceil(p));\n vec2 f = fract(p);\n o += mix(\n mix(randomG(w.xy), randomG(w.xw), f.y),\n mix(randomG(w.zy), randomG(w.zw), f.y),\n f.x);\n o += .2 / exp(2. * abs(sin(.2 * p.x + .5 * p.y)));\n }\n return o / 3.;\n}\n\n${fiberNoise}\n\nvec2 randomGB(vec2 p) {\n vec2 uv = floor(p) / 50. + .5;\n return texture(u_noiseTexture, fract(uv)).gb;\n}\nfloat crumpledNoise(vec2 t, float pw) {\n vec2 p = floor(t);\n float wsum = 0.;\n float cl = 0.;\n for (int y = -1; y < 2; y += 1) {\n for (int x = -1; x < 2; x += 1) {\n vec2 b = vec2(float(x), float(y));\n vec2 q = b + p;\n vec2 q2 = q - floor(q / 8.) * 8.;\n vec2 c = q + randomGB(q2);\n vec2 r = c - t;\n float w = pow(smoothstep(0., 1., 1. - abs(r.x)), pw) * pow(smoothstep(0., 1., 1. - abs(r.y)), pw);\n cl += (.5 + .5 * sin((q2.x + q2.y * 5.) * 8.)) * w;\n wsum += w;\n }\n }\n return pow(wsum != 0.0 ? cl / wsum : 0.0, .5) * 2.;\n}\nfloat crumplesShape(vec2 uv) {\n return crumpledNoise(uv * .25, 16.) * crumpledNoise(uv * .5, 2.);\n}\n\n\nvec2 folds(vec2 uv) {\n vec3 pp = vec3(0.);\n float l = 9.;\n for (float i = 0.; i < 15.; i++) {\n if (i >= u_foldCount) break;\n vec2 rand = randomGB(vec2(i, i * u_seed));\n float an = rand.x * TWO_PI;\n vec2 p = vec2(cos(an), sin(an)) * rand.y;\n float dist = distance(uv, p);\n l = min(l, dist);\n\n if (l == dist) {\n pp.xy = (uv - p.xy);\n pp.z = dist;\n }\n }\n return mix(pp.xy, vec2(0.), pow(pp.z, .25));\n}\n\nfloat drops(vec2 uv) {\n vec2 iDropsUV = floor(uv);\n vec2 fDropsUV = fract(uv);\n float dropsMinDist = 1.;\n for (int j = -1; j <= 1; j++) {\n for (int i = -1; i <= 1; i++) {\n vec2 neighbor = vec2(float(i), float(j));\n vec2 offset = randomGB(iDropsUV + neighbor);\n offset = .5 + .5 * sin(10. * u_seed + TWO_PI * offset);\n vec2 pos = neighbor + offset - fDropsUV;\n float dist = length(pos);\n dropsMinDist = min(dropsMinDist, dropsMinDist*dist);\n }\n }\n return 1. - smoothstep(.05, .09, pow(dropsMinDist, .5));\n}\n\nfloat lst(float edge0, float edge1, float x) {\n return clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n}\n\nvoid main() {\n\n vec2 imageUV = v_imageUV;\n vec2 patternUV = v_imageUV - .5;\n patternUV = 5. * (patternUV * vec2(u_imageAspectRatio, 1.));\n\n vec2 roughnessUv = 1.5 * (gl_FragCoord.xy - .5 * u_resolution) / u_pixelRatio;\n float roughness = roughness(roughnessUv + vec2(1., 0.)) - roughness(roughnessUv - vec2(1., 0.));\n\n vec2 crumplesUV = fract(patternUV * .02 / u_crumpleSize - u_seed) * 32.;\n float crumples = u_crumples * (crumplesShape(crumplesUV + vec2(.05, 0.)) - crumplesShape(crumplesUV));\n\n vec2 fiberUV = 2. / u_fiberSize * patternUV;\n float fiber = fiberNoise(fiberUV, vec2(0.));\n fiber = .5 * u_fiber * (fiber - 1.);\n\n vec2 normal = vec2(0.);\n vec2 normalImage = vec2(0.);\n\n vec2 foldsUV = patternUV * .12;\n foldsUV = rotate(foldsUV, 4. * u_seed);\n vec2 w = folds(foldsUV);\n foldsUV = rotate(foldsUV + .007 * cos(u_seed), .01 * sin(u_seed));\n vec2 w2 = folds(foldsUV);\n\n float drops = u_drops * drops(patternUV * 2.);\n\n float fade = u_fade * fbm(.17 * patternUV + 10. * u_seed);\n fade = clamp(8. * fade * fade * fade, 0., 1.);\n\n w = mix(w, vec2(0.), fade);\n w2 = mix(w2, vec2(0.), fade);\n crumples = mix(crumples, 0., fade);\n drops = mix(drops, 0., fade);\n fiber *= mix(1., .5, fade);\n roughness *= mix(1., .5, fade);\n\n normal.xy += u_folds * min(5. * u_contrast, 1.) * 4. * max(vec2(0.), w + w2);\n normalImage.xy += u_folds * 2. * w;\n\n normal.xy += crumples;\n normalImage.xy += 1.5 * crumples;\n\n normal.xy += 3. * drops;\n normalImage.xy += .2 * drops;\n\n normal.xy += u_roughness * 1.5 * roughness;\n normal.xy += fiber;\n\n normalImage += u_roughness * .75 * roughness;\n normalImage += .2 * fiber;\n\n vec3 lightPos = vec3(1., 2., 1.);\n float res = dot(normalize(vec3(normal, 9.5 - 9. * pow(u_contrast, .1))), normalize(lightPos));\n\n vec3 fgColor = u_colorFront.rgb * u_colorFront.a;\n float fgOpacity = u_colorFront.a;\n vec3 bgColor = u_colorBack.rgb * u_colorBack.a;\n float bgOpacity = u_colorBack.a;\n\n imageUV += .02 * normalImage;\n float frame = getUvFrame(imageUV);\n vec4 image = texture(u_image, imageUV);\n image.rgb += .6 * pow(u_contrast, .4) * (res - .7);\n\n frame *= image.a;\n\n vec3 color = fgColor * res;\n float opacity = fgOpacity * res;\n\n color += bgColor * (1. - opacity);\n opacity += bgOpacity * (1. - opacity);\n opacity = mix(opacity, 1., frame);\n\n color -= .007 * drops;\n\n color.rgb = mix(color, image.rgb, frame);\n\n fragColor = vec4(color, opacity);\n}\n`;\nexport {\n paperTextureFragmentShader\n};\n//# sourceMappingURL=paper-texture.js.map\n","/* * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Paper Shaders *\n * https://github.com/paper-design/shaders *\n * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\nfunction getShaderColorFromString(colorString) {\n if (Array.isArray(colorString)) {\n if (colorString.length === 4) return colorString;\n if (colorString.length === 3) return [...colorString, 1];\n return fallbackColor;\n }\n if (typeof colorString !== \"string\") {\n return fallbackColor;\n }\n let r, g, b, a = 1;\n if (colorString.startsWith(\"#\")) {\n [r, g, b, a] = hexToRgba(colorString);\n } else if (colorString.startsWith(\"rgb\")) {\n const rgba = parseRgba(colorString);\n if (rgba === null) return fallbackColor;\n [r, g, b, a] = rgba;\n } else if (colorString.startsWith(\"hsl\")) {\n const hsla = parseHsla(colorString);\n if (hsla === null) return fallbackColor;\n [r, g, b, a] = hslaToRgba(hsla);\n } else {\n console.error(\"Unsupported color format\", colorString);\n return fallbackColor;\n }\n return [clamp(r, 0, 1), clamp(g, 0, 1), clamp(b, 0, 1), clamp(a, 0, 1)];\n}\nfunction hexToRgba(hex) {\n hex = hex.replace(/^#/, \"\");\n if (hex.length === 3 || hex.length === 4) {\n hex = hex.split(\"\").map((char) => char + char).join(\"\");\n }\n if (hex.length === 6) {\n hex = hex + \"ff\";\n }\n if (!/^[0-9a-f]{8}$/i.test(hex)) {\n console.warn(\"Invalid hex color\");\n return fallbackColor;\n }\n const r = parseInt(hex.slice(0, 2), 16) / 255;\n const g = parseInt(hex.slice(2, 4), 16) / 255;\n const b = parseInt(hex.slice(4, 6), 16) / 255;\n const a = parseInt(hex.slice(6, 8), 16) / 255;\n return [r, g, b, a];\n}\nfunction parseRgba(rgba) {\n const match = rgba.match(/^rgba?\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*([0-9.]+))?\\s*\\)$/i);\n if (!match) return null;\n return [\n parseInt(match[1] ?? \"0\") / 255,\n parseInt(match[2] ?? \"0\") / 255,\n parseInt(match[3] ?? \"0\") / 255,\n match[4] === void 0 ? 1 : parseFloat(match[4])\n ];\n}\nfunction parseHsla(hsla) {\n const match = hsla.match(/^hsla?\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*(?:,\\s*([0-9.]+))?\\s*\\)$/i);\n if (!match) return null;\n return [\n parseInt(match[1] ?? \"0\"),\n parseInt(match[2] ?? \"0\"),\n parseInt(match[3] ?? \"0\"),\n match[4] === void 0 ? 1 : parseFloat(match[4])\n ];\n}\nfunction hslaToRgba(hsla) {\n const [h, s, l, a] = hsla;\n const hDecimal = h / 360;\n const sDecimal = s / 100;\n const lDecimal = l / 100;\n let r, g, b;\n if (s === 0) {\n r = g = b = lDecimal;\n } else {\n const hue2rgb = (p2, q2, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p2 + (q2 - p2) * 6 * t;\n if (t < 1 / 2) return q2;\n if (t < 2 / 3) return p2 + (q2 - p2) * (2 / 3 - t) * 6;\n return p2;\n };\n const q = lDecimal < 0.5 ? lDecimal * (1 + sDecimal) : lDecimal + sDecimal - lDecimal * sDecimal;\n const p = 2 * lDecimal - q;\n r = hue2rgb(p, q, hDecimal + 1 / 3);\n g = hue2rgb(p, q, hDecimal);\n b = hue2rgb(p, q, hDecimal - 1 / 3);\n }\n return [r, g, b, a];\n}\nconst clamp = (n, min, max) => Math.min(Math.max(n, min), max);\nconst fallbackColor = [0.5, 0.5, 0.5, 1];\nexport {\n clamp,\n getShaderColorFromString\n};\n//# sourceMappingURL=get-shader-color-from-string.js.map\n","/* * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Paper Shaders *\n * https://github.com/paper-design/shaders *\n * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\nfunction getShaderNoiseTexture() {\n if (typeof window === \"undefined\") {\n return void 0;\n }\n const img = new Image();\n img.src = noiseSrc;\n return img;\n}\nconst noiseSrc = \"data:image/png;base64,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\";\nexport {\n getShaderNoiseTexture\n};\n//# sourceMappingURL=get-shader-noise-texture.js.map\n","/* * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Paper Shaders *\n * https://github.com/paper-design/shaders *\n * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\nconst emptyPixel = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\nexport {\n emptyPixel\n};\n//# sourceMappingURL=empty-pixel.js.map\n","export type PaperTextureFit = 'none' | 'contain' | 'cover';\n\n/**\n * Literal parameters forwarded to Paper Design's paper texture shader.\n * Colors intentionally remain ordinary CSS color strings; they are not token\n * references and are parsed once into shader RGBA uniforms.\n */\nexport interface PaperTextureConfig {\n image?: HTMLImageElement | string;\n colorFront?: string;\n colorBack?: string;\n contrast?: number;\n roughness?: number;\n fiber?: number;\n fiberSize?: number;\n crumples?: number;\n crumpleSize?: number;\n folds?: number;\n foldCount?: number;\n fade?: number;\n drops?: number;\n seed?: number;\n fit?: PaperTextureFit;\n scale?: number;\n rotation?: number;\n originX?: number;\n originY?: number;\n offsetX?: number;\n offsetY?: number;\n worldWidth?: number;\n worldHeight?: number;\n speed?: number;\n frame?: number;\n minPixelRatio?: number;\n maxPixelCount?: number;\n /** CSS opacity applied after the shader has rendered. */\n opacity?: number;\n}\n\nexport const DEFAULT_PAPER_TEXTURE_CONFIG: Required<Omit<PaperTextureConfig, 'image'>> = {\n colorFront: '#b8b8b8',\n colorBack: '#ffffff',\n contrast: 0.3,\n roughness: 0.4,\n fiber: 0.3,\n fiberSize: 0.2,\n crumples: 0.3,\n crumpleSize: 0.35,\n folds: 0.65,\n foldCount: 5,\n fade: 0,\n drops: 0.2,\n seed: 5.8,\n fit: 'cover',\n scale: 0.6,\n rotation: 0,\n originX: 0.5,\n originY: 0.5,\n offsetX: 0,\n offsetY: 0,\n worldWidth: 0,\n worldHeight: 0,\n speed: 0,\n frame: 0,\n minPixelRatio: 2,\n maxPixelCount: 1920 * 1080 * 4,\n opacity: 1,\n};\n",":host {\n position: absolute;\n inset: 0;\n display: block;\n overflow: hidden;\n pointer-events: none;\n opacity: var(--ds-paper-texture-opacity, 1);\n}\n\n.paper-texture__mount {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n overflow: hidden;\n isolation: isolate;\n}\n\n.paper-texture__mount[data-paper-shader] canvas {\n z-index: 0;\n}\n\n:host([data-paper-texture-error]) {\n display: none;\n}\n","import { Component, Element, Host, Prop, Watch, h } from '@stencil/core';\nimport {\n emptyPixel,\n getShaderColorFromString,\n getShaderNoiseTexture,\n paperTextureFragmentShader,\n ShaderFitOptions,\n ShaderMount,\n type ShaderMountUniforms,\n} from '@paper-design/shaders';\nimport { DEFAULT_PAPER_TEXTURE_CONFIG, type PaperTextureConfig } from './paper-texture-types';\n\nlet emptyPixelPromise: Promise<HTMLImageElement> | undefined;\nlet noiseTexturePromise: Promise<HTMLImageElement> | undefined;\n\nfunction waitForImage(image: HTMLImageElement): Promise<HTMLImageElement> {\n if (image.complete && image.naturalWidth > 0) return Promise.resolve(image);\n\n return new Promise((resolve, reject) => {\n const onLoad = () => {\n cleanup();\n resolve(image);\n };\n const onError = () => {\n cleanup();\n reject(new Error(`Paper texture image failed to load: ${image.src}`));\n };\n const cleanup = () => {\n image.removeEventListener('load', onLoad);\n image.removeEventListener('error', onError);\n };\n\n image.addEventListener('load', onLoad, { once: true });\n image.addEventListener('error', onError, { once: true });\n });\n}\n\nfunction loadImage(source: HTMLImageElement | string | undefined): Promise<HTMLImageElement> {\n if (source instanceof HTMLImageElement) return waitForImage(source);\n\n const image = new Image();\n if (source && source !== emptyPixel) image.crossOrigin = 'anonymous';\n image.src = source || emptyPixel;\n return waitForImage(image);\n}\n\nfunction loadEmptyPixel(): Promise<HTMLImageElement> {\n emptyPixelPromise ??= loadImage(emptyPixel);\n return emptyPixelPromise;\n}\n\nfunction loadNoiseTexture(): Promise<HTMLImageElement> {\n noiseTexturePromise ??= Promise.resolve(getShaderNoiseTexture()).then(image => {\n if (!image) throw new Error('Paper texture noise texture is unavailable');\n return waitForImage(image);\n });\n return noiseTexturePromise;\n}\n\n@Component({\n tag: 'ds-paper-texture',\n styleUrl: 'PaperTexture.css',\n scoped: true,\n})\nexport class PaperTexture {\n @Element() el!: HTMLElement;\n\n /** Paper Design shader parameters. Set as a JavaScript property. */\n @Prop() config: PaperTextureConfig = {};\n\n private shaderMount?: ShaderMount;\n private syncGeneration = 0;\n private hasLoaded = false;\n\n componentDidLoad() {\n this.hasLoaded = true;\n void this.syncShader();\n }\n\n disconnectedCallback() {\n this.syncGeneration += 1;\n this.disposeShader();\n }\n\n @Watch('config')\n onConfigChange() {\n if (this.hasLoaded) void this.syncShader();\n }\n\n private resolvedConfig(): Required<Omit<PaperTextureConfig, 'image'>> &\n Pick<PaperTextureConfig, 'image'> {\n return {\n ...DEFAULT_PAPER_TEXTURE_CONFIG,\n ...(this.config ?? {}),\n };\n }\n\n private async syncShader() {\n const generation = ++this.syncGeneration;\n const config = this.resolvedConfig();\n\n try {\n const [image, noiseTexture] = await Promise.all([\n loadImage(config.image).catch(() => loadEmptyPixel()),\n loadNoiseTexture(),\n ]);\n\n if (generation !== this.syncGeneration || !this.el.isConnected) return;\n\n const uniforms = this.buildUniforms(config, image, noiseTexture);\n const mountElement = this.el.querySelector<HTMLElement>('.paper-texture__mount');\n if (!mountElement) return;\n\n if (!this.shaderMount) {\n this.shaderMount = new ShaderMount(\n mountElement,\n paperTextureFragmentShader,\n uniforms,\n undefined,\n config.speed,\n config.frame,\n config.minPixelRatio,\n config.maxPixelCount,\n ['u_image']\n );\n } else {\n this.shaderMount.setUniforms(uniforms);\n this.shaderMount.setSpeed(config.speed);\n this.shaderMount.setFrame(config.frame);\n this.shaderMount.setMinPixelRatio(config.minPixelRatio);\n this.shaderMount.setMaxPixelCount(config.maxPixelCount);\n }\n\n this.el.removeAttribute('data-paper-texture-error');\n } catch (error) {\n if (generation !== this.syncGeneration) return;\n this.disposeShader();\n this.el.querySelector<HTMLElement>('.paper-texture__mount')?.replaceChildren();\n this.el.setAttribute('data-paper-texture-error', 'unavailable');\n console.warn('[ds-paper-texture] WebGL2 paper texture unavailable.', error);\n }\n }\n\n private buildUniforms(\n config: Required<Omit<PaperTextureConfig, 'image'>> & Pick<PaperTextureConfig, 'image'>,\n image: HTMLImageElement,\n noiseTexture: HTMLImageElement\n ): ShaderMountUniforms {\n return {\n u_image: image,\n u_noiseTexture: noiseTexture,\n u_colorFront: getShaderColorFromString(config.colorFront),\n u_colorBack: getShaderColorFromString(config.colorBack),\n u_contrast: config.contrast,\n u_roughness: config.roughness,\n u_fiber: config.fiber,\n u_fiberSize: config.fiberSize,\n u_crumples: config.crumples,\n u_crumpleSize: config.crumpleSize,\n u_foldCount: config.foldCount,\n u_folds: config.folds,\n u_fade: config.fade,\n u_drops: config.drops,\n u_seed: config.seed,\n u_fit: ShaderFitOptions[config.fit],\n u_scale: config.scale,\n u_rotation: config.rotation,\n u_offsetX: config.offsetX,\n u_offsetY: config.offsetY,\n u_originX: config.originX,\n u_originY: config.originY,\n u_worldWidth: config.worldWidth,\n u_worldHeight: config.worldHeight,\n };\n }\n\n private disposeShader() {\n this.shaderMount?.dispose();\n this.shaderMount = undefined;\n }\n\n render() {\n const config = this.resolvedConfig();\n return (\n <Host aria-hidden=\"true\" style={{ '--ds-paper-texture-opacity': String(config.opacity) }}>\n <div class=\"paper-texture__mount\" />\n </Host>\n );\n }\n}\n"],"mappings":"2DAKA,MAAMA,EAAqB,mkKCC3B,MAAMC,EAA0B,KAAO,KAAO,EAC9C,MAAMC,EACJC,cACAC,cACAC,GACAC,QAAU,KACVC,iBAAmB,GAEnBC,eAEAC,MAAQ,KAERC,eAAiB,EAEjBC,aAAe,EAEfC,MAAQ,EAERC,aAAe,EAEfC,iBAEAC,QAAU,GAEVC,gBAAkB,MAElBC,kBAAoB,KAEpBC,SAA2B,IAAIC,IAC/BC,cACAC,cACAC,SAAWA,IACXC,aAAe,GACfC,eAAiC,IAAIL,IACrCM,cACA,WAAAC,CAAYvB,EAAeK,EAAgBmB,EAAUC,EAAwBhB,EAAQ,EAAGiB,EAAQ,EAAGT,EAAgB,EAAGC,EAAgBpB,EAAyBc,EAAU,IACvK,GAAIZ,GAAe2B,WAAa,EAAG,CACjCC,KAAK5B,cAAgBA,CAC3B,KAAW,CACL,MAAM,IAAI6B,MAAM,uDACtB,CACID,KAAKN,cAAgBtB,EAAcsB,cACnC,IAAKM,KAAKN,cAAcQ,cAAc,4BAA6B,CACjE,MAAMC,EAAeH,KAAKN,cAAcU,cAAc,SACtDD,EAAaE,UAAYC,EACzBH,EAAaI,aAAa,oBAAqB,IAC/CP,KAAKN,cAAcc,KAAKC,QAAQN,EACtC,CACI,MAAM9B,EAAgB2B,KAAKN,cAAcU,cAAc,UACvDJ,KAAK3B,cAAgBA,EACrB2B,KAAK5B,cAAcqC,QAAQpC,GAC3B2B,KAAKvB,eAAiBA,EACtBuB,KAAKjB,iBAAmBa,EACxBI,KAAKhB,QAAUA,EACfgB,KAAKpB,aAAekB,EACpBE,KAAKX,cAAgBA,EACrBW,KAAKV,cAAgBA,EACrB,MAAMhB,EAAKD,EAAcqC,WAAW,SAAUb,GAC9C,IAAKvB,EAAI,CACP,MAAM,IAAI2B,MAAM,wDACtB,CACID,KAAK1B,GAAKA,EACV0B,KAAKW,cACLX,KAAKY,yBACLZ,KAAKa,gBACLb,KAAKc,iBAAiBd,KAAKjB,kBAC3BiB,KAAKe,sBACLC,gBAAgBC,iBAAiB,SAAUjB,KAAKkB,4BAChDlB,KAAKmB,4BACLnB,KAAKoB,SAASvC,GACdmB,KAAK5B,cAAcmC,aAAa,oBAAqB,IACrDP,KAAK5B,cAAciD,iBAAmBrB,KACtCA,KAAKN,cAAcuB,iBAAiB,mBAAoBjB,KAAKsB,+BACjE,CACEX,YAAc,KACZ,MAAMpC,EAAUgD,EAAcvB,KAAK1B,GAAIL,EAAoB+B,KAAKvB,gBAChE,IAAKF,EAAS,OACdyB,KAAKzB,QAAUA,CAAO,EAExBqC,uBAAyB,KACvB,MAAMY,EAA4BxB,KAAK1B,GAAGmD,kBAAkBzB,KAAKzB,QAAS,cAC1E,MAAMmD,EAAiB1B,KAAK1B,GAAGqD,eAC/B3B,KAAK1B,GAAGsD,WAAW5B,KAAK1B,GAAGuD,aAAcH,GACzC,MAAMI,EAAY,EAAC,GAAI,EAAI,GAAG,GAAI,EAAI,GAAG,EAAI,EAAG,GAAG,EAAI,EAAG,GAC1D9B,KAAK1B,GAAGyD,WAAW/B,KAAK1B,GAAGuD,aAAc,IAAIG,aAAaF,GAAY9B,KAAK1B,GAAG2D,aAC9EjC,KAAK1B,GAAG4D,wBAAwBV,GAChCxB,KAAK1B,GAAG6D,oBAAoBX,EAA2B,EAAGxB,KAAK1B,GAAG8D,MAAO,MAAO,EAAG,EAAE,EAEvFvB,cAAgB,KACd,MAAMrC,EAAmB,CACvB6D,OAAQrC,KAAK1B,GAAGgE,mBAAmBtC,KAAKzB,QAAS,UACjDgE,aAAcvC,KAAK1B,GAAGgE,mBAAmBtC,KAAKzB,QAAS,gBACvDiE,aAAcxC,KAAK1B,GAAGgE,mBAAmBtC,KAAKzB,QAAS,iBAEzDkE,OAAOC,QAAQ1C,KAAKjB,kBAAkB4D,SAAQ,EAAEC,EAAKC,MACnDrE,EAAiBoE,GAAO5C,KAAK1B,GAAGgE,mBAAmBtC,KAAKzB,QAASqE,GACjE,GAAIC,aAAiBC,iBAAkB,CACrC,MAAMC,EAAyB,GAAGH,eAClCpE,EAAiBuE,GAA0B/C,KAAK1B,GAAGgE,mBAAmBtC,KAAKzB,QAASwE,EAC5F,KAEI/C,KAAKxB,iBAAmBA,CAAgB,EAQ1CwE,YAAc,EACdC,YAAc,EACdC,aAAe,EACfC,uBAAyB,EACzBC,wBAA0B,EAC1BC,sBAAwB,MACxBC,qBAAuB,KACvBC,aAAe,KACfC,eAAiB,KACjBzC,oBAAsB,KACpBf,KAAKwD,eAAiB,IAAIC,gBAAe,EAAEC,MACzC,GAAIA,GAAOC,cAAc,GAAI,CAC3B,MAAMC,EAAoBF,EAAMG,4BAA4B,GAC5D,GAAID,SAAsB,EAAQ,CAChC5D,KAAKqD,sBAAwB,KAC7BrD,KAAKmD,uBAAyBS,EAAkBE,WAChD9D,KAAKoD,wBAA0BQ,EAAkBG,SAC3D,CACQ/D,KAAKiD,YAAcS,EAAMC,cAAc,GAAGG,WAC1C9D,KAAKkD,aAAeQ,EAAMC,cAAc,GAAGI,SACnD,CACM/D,KAAKgE,cAAc,IAErBhE,KAAKwD,eAAeS,QAAQjE,KAAK5B,cAAc,EAEjD+C,0BAA4B,KAC1B,MAAM+C,EAAOlE,KAAKN,cAAcyE,YAChC,IAAKD,GAAME,qBAAsB,OACjCpE,KAAKsD,qBAAuB,IAAIY,EAAKE,sBAAqB,EAAEV,MAC1D1D,KAAKuD,aAAeG,GAAOW,gBAAkB,KAC7CrE,KAAKsE,oBAAoB,IAE3BtE,KAAKsD,qBAAqBW,QAAQjE,KAAK5B,cAAc,EAQvD8C,2BAA6B,KAC3BlB,KAAKwD,gBAAgBe,aACrBvE,KAAKe,qBAAqB,EAG5BiD,aAAe,KACb,IAAIQ,EAAmB,EACvB,IAAIC,EAAoB,EACxB,MAAMC,EAAMC,KAAKC,IAAI,EAAGC,OAAOC,kBAC/B,MAAMC,EAAY/D,gBAAgBgE,OAAS,EAC3C,GAAIhF,KAAKqD,sBAAuB,CAC9B,MAAM4B,EAA2BN,KAAKC,IAAI,EAAG5E,KAAKX,cAAgBqF,GAClEF,EAAmBxE,KAAKmD,uBAAyB8B,EAA2BF,EAC5EN,EAAoBzE,KAAKoD,wBAA0B6B,EAA2BF,CACpF,KAAW,CACL,IAAIG,EAAoBP,KAAKC,IAAIF,EAAK1E,KAAKX,eAAiB0F,EAC5D,GAAI/E,KAAKT,SAAU,CACjB,MAAM4F,EAAYC,EAAqBpF,KAAKN,eAC5CwF,GAAqBP,KAAKC,IAAI,EAAGO,EACzC,CACMX,EAAmBG,KAAKU,MAAMrF,KAAKiD,aAAeiC,EAClDT,EAAoBE,KAAKU,MAAMrF,KAAKkD,cAAgBgC,CAC1D,CACI,MAAMI,EAAwBX,KAAKY,KAAKvF,KAAKV,eAAiBqF,KAAKY,KAAKf,EAAmBC,GAC3F,MAAMe,EAA2Bb,KAAKc,IAAI,EAAGH,GAC7C,MAAMI,EAAWf,KAAKU,MAAMb,EAAmBgB,GAC/C,MAAMG,EAAYhB,KAAKU,MAAMZ,EAAoBe,GACjD,MAAMI,EAAiBF,EAAWf,KAAKU,MAAMrF,KAAKiD,aAClD,GAAIjD,KAAK3B,cAAcwH,QAAUH,GAAY1F,KAAK3B,cAAcyH,SAAWH,GAAa3F,KAAKgD,cAAgB4C,EAAgB,CAC3H5F,KAAKgD,YAAc4C,EACnB5F,KAAK3B,cAAcwH,MAAQH,EAC3B1F,KAAK3B,cAAcyH,OAASH,EAC5B3F,KAAKd,kBAAoB,KACzBc,KAAK1B,GAAGyH,SAAS,EAAG,EAAG/F,KAAK1B,GAAG0H,OAAOH,MAAO7F,KAAK1B,GAAG0H,OAAOF,QAC5D9F,KAAKiG,OAAOC,YAAYC,MAC9B,GAEEF,OAAUG,IACR,GAAIpG,KAAKf,gBAAiB,OAC1B,GAAIe,KAAKzB,UAAY,KAAM,CACzB8H,QAAQC,KAAK,wDACb,MACN,CACI,MAAMC,EAAKH,EAAcpG,KAAKrB,eAC9BqB,KAAKrB,eAAiByH,EACtB,GAAIpG,KAAKlB,eAAiB,EAAG,CAC3BkB,KAAKpB,cAAgB2H,EAAKvG,KAAKlB,YACrC,CACIkB,KAAK1B,GAAGkI,MAAMxG,KAAK1B,GAAGmI,kBACtBzG,KAAK1B,GAAGoI,WAAW1G,KAAKzB,SACxByB,KAAK1B,GAAGqI,UAAU3G,KAAKxB,iBAAiB6D,OAAQrC,KAAKpB,aAAe,MACpE,GAAIoB,KAAKd,kBAAmB,CAC1Bc,KAAK1B,GAAGsI,UAAU5G,KAAKxB,iBAAiBgE,aAAcxC,KAAK1B,GAAG0H,OAAOH,MAAO7F,KAAK1B,GAAG0H,OAAOF,QAC3F9F,KAAK1B,GAAGqI,UAAU3G,KAAKxB,iBAAiB+D,aAAcvC,KAAKgD,aAC3DhD,KAAKd,kBAAoB,KAC/B,CACIc,KAAK1B,GAAGuI,WAAW7G,KAAK1B,GAAGwI,UAAW,EAAG,GACzC,GAAI9G,KAAKlB,eAAiB,EAAG,CAC3BkB,KAAK+G,eACX,KAAW,CACL/G,KAAKtB,MAAQ,IACnB,GAEEqI,cAAgB,KACd,GAAI/G,KAAKtB,QAAU,KAAM,CACvBsI,qBAAqBhH,KAAKtB,MAChC,CACIsB,KAAKtB,MAAQuI,sBAAsBjH,KAAKiG,OAAO,EAGjDiB,kBAAoB,CAACC,EAAaC,KAChC,IAAKA,EAAMC,UAAYD,EAAME,eAAiB,EAAG,CAC/C,MAAM,IAAIrH,MAAM,oCAAoCkH,yBAC1D,CACI,MAAMI,EAAkBvH,KAAKb,SAASqI,IAAIL,GAC1C,GAAII,EAAiB,CACnBvH,KAAK1B,GAAGmJ,cAAcF,EAC5B,CACI,IAAKvH,KAAKP,eAAeiI,IAAIP,GAAc,CACzCnH,KAAKP,eAAekI,IAAIR,EAAanH,KAAKP,eAAemI,KAC/D,CACI,MAAMC,EAAc7H,KAAKP,eAAe+H,IAAIL,GAC5CnH,KAAK1B,GAAGwJ,cAAc9H,KAAK1B,GAAGyJ,SAAWF,GACzC,MAAMG,EAAUhI,KAAK1B,GAAG2J,gBACxBjI,KAAK1B,GAAG4J,YAAYlI,KAAK1B,GAAG6J,WAAYH,GACxChI,KAAK1B,GAAG8J,cAAcpI,KAAK1B,GAAG6J,WAAYnI,KAAK1B,GAAG+J,eAAgBrI,KAAK1B,GAAGgK,eAC1EtI,KAAK1B,GAAG8J,cAAcpI,KAAK1B,GAAG6J,WAAYnI,KAAK1B,GAAGiK,eAAgBvI,KAAK1B,GAAGgK,eAC1EtI,KAAK1B,GAAG8J,cAAcpI,KAAK1B,GAAG6J,WAAYnI,KAAK1B,GAAGkK,mBAAoBxI,KAAK1B,GAAGmK,QAC9EzI,KAAK1B,GAAG8J,cAAcpI,KAAK1B,GAAG6J,WAAYnI,KAAK1B,GAAGoK,mBAAoB1I,KAAK1B,GAAGmK,QAC9EzI,KAAK1B,GAAGqK,WAAW3I,KAAK1B,GAAG6J,WAAY,EAAGnI,KAAK1B,GAAGsK,KAAM5I,KAAK1B,GAAGsK,KAAM5I,KAAK1B,GAAGuK,cAAezB,GAC7F,GAAIpH,KAAKhB,QAAQ8J,SAAS3B,GAAc,CACtCnH,KAAK1B,GAAGyK,eAAe/I,KAAK1B,GAAG6J,YAC/BnI,KAAK1B,GAAG8J,cAAcpI,KAAK1B,GAAG6J,WAAYnI,KAAK1B,GAAGkK,mBAAoBxI,KAAK1B,GAAG0K,qBACpF,CACI,MAAMC,EAAQjJ,KAAK1B,GAAG4K,WACtB,GAAID,IAAUjJ,KAAK1B,GAAG6K,UAAYnB,IAAY,KAAM,CAClD3B,QAAQ4C,MAAM,qDAAsDA,GACpE,MACN,CACIjJ,KAAKb,SAASwI,IAAIR,EAAaa,GAC/B,MAAMoB,EAAWpJ,KAAKxB,iBAAiB2I,GACvC,GAAIiC,EAAU,CACZpJ,KAAK1B,GAAG+K,UAAUD,EAAUvB,GAC5B,MAAM9E,EAAyB,GAAGoE,eAClC,MAAMmC,EAAsBtJ,KAAKxB,iBAAiBuE,GAClD,GAAIuG,EAAqB,CACvB,MAAMC,EAAcnC,EAAME,aAAeF,EAAMoC,cAC/CxJ,KAAK1B,GAAGqI,UAAU2C,EAAqBC,EAC/C,CACA,GAGEE,sBAAwB,CAACC,EAAGC,KAC1B,GAAID,IAAMC,EAAG,OAAO,KACpB,GAAIC,MAAMC,QAAQH,IAAME,MAAMC,QAAQF,IAAMD,EAAEI,SAAWH,EAAEG,OAAQ,CACjE,OAAOJ,EAAEK,OAAM,CAACC,EAAKC,IAAMjK,KAAKyJ,sBAAsBO,EAAKL,EAAEM,KACnE,CACI,OAAO,KAAK,EAGdnJ,iBAAoBoJ,IAClBlK,KAAK1B,GAAGoI,WAAW1G,KAAKzB,SACxBkE,OAAOC,QAAQwH,GAAiBvH,SAAQ,EAAEC,EAAKC,MAC7C,IAAIsH,EAAatH,EACjB,GAAIA,aAAiBC,iBAAkB,CACrCqH,EAAa,GAAGtH,EAAMuH,IAAIC,MAAM,EAAG,QAAQxH,EAAMyE,gBAAgBzE,EAAM2G,eAC/E,CACM,GAAIxJ,KAAKyJ,sBAAsBzJ,KAAKR,aAAaoD,GAAMuH,GAAa,OACpEnK,KAAKR,aAAaoD,GAAOuH,EACzB,MAAMf,EAAWpJ,KAAKxB,iBAAiBoE,GACvC,IAAKwG,EAAU,CACb/C,QAAQC,KAAK,wBAAwB1D,eACrC,MACR,CACM,GAAIC,aAAiBC,iBAAkB,CACrC9C,KAAKkH,kBAAkBtE,EAAKC,EACpC,MAAa,GAAI+G,MAAMC,QAAQhH,GAAQ,CAC/B,IAAIyH,EAAY,KAChB,IAAIC,EAAc,KAClB,GAAI1H,EAAM,UAAO,GAAU+G,MAAMC,QAAQhH,EAAM,IAAK,CAClD,MAAM2H,EAAmB3H,EAAM,GAAGiH,OAClC,GAAIjH,EAAMkH,OAAOU,GAAQA,EAAIX,SAAWU,IAAmB,CACzDF,EAAYzH,EAAM6H,OAClBH,EAAcC,CAC1B,KAAiB,CACLnE,QAAQC,KAAK,gDAAgD1D,KAC7D,MACZ,CACA,KAAe,CACL0H,EAAYzH,EACZ0H,EAAcD,EAAUR,MAClC,CACQ,OAAQS,GACN,KAAK,EACHvK,KAAK1B,GAAGqM,WAAWvB,EAAUkB,GAC7B,MACF,KAAK,EACHtK,KAAK1B,GAAGsM,WAAWxB,EAAUkB,GAC7B,MACF,KAAK,EACHtK,KAAK1B,GAAGuM,WAAWzB,EAAUkB,GAC7B,MACF,KAAK,EACHtK,KAAK1B,GAAGwM,iBAAiB1B,EAAU,MAAOkB,GAC1C,MACF,KAAK,GACHtK,KAAK1B,GAAGyM,iBAAiB3B,EAAU,MAAOkB,GAC1C,MACF,QACEjE,QAAQC,KAAK,qCAAqCiE,KAE9D,MAAa,UAAW1H,IAAU,SAAU,CACpC7C,KAAK1B,GAAGqI,UAAUyC,EAAUvG,EACpC,MAAa,UAAWA,IAAU,UAAW,CACrC7C,KAAK1B,GAAG+K,UAAUD,EAAUvG,EAAQ,EAAI,EAChD,KAAa,CACLwD,QAAQC,KAAK,gCAAgC1D,aAAeC,IACpE,IACM,EAGJmI,gBAAkB,IACThL,KAAKpB,aAGdqM,SAAYC,IACVlL,KAAKpB,aAAesM,EACpBlL,KAAKrB,eAAiBuH,YAAYC,MAClCnG,KAAKiG,OAAOC,YAAYC,MAAM,EAGhC/E,SAAW,CAAC+J,EAAW,KACrBnL,KAAKnB,MAAQsM,EACbnL,KAAKsE,oBAAoB,EAG3BA,mBAAqB,KACnBtE,KAAKoL,gBAAgBpL,KAAKN,cAAc2L,SAAWrL,KAAKuD,aAAe,EAAIvD,KAAKnB,MAAM,EAExFuM,gBAAmBD,IACjBnL,KAAKlB,aAAeqM,EACpB,GAAInL,KAAKtB,QAAU,MAAQyM,IAAa,EAAG,CACzCnL,KAAKrB,eAAiBuH,YAAYC,MAClCnG,KAAKtB,MAAQuI,sBAAsBjH,KAAKiG,OAC9C,CACI,GAAIjG,KAAKtB,QAAU,MAAQyM,IAAa,EAAG,CACzCnE,qBAAqBhH,KAAKtB,OAC1BsB,KAAKtB,MAAQ,IACnB,GAGE4M,iBAAmB,CAACC,EAAmBrN,KACrC8B,KAAKV,cAAgBiM,EACrBvL,KAAKgE,cAAc,EAGrBwH,iBAAmB,CAACC,EAAmB,KACrCzL,KAAKX,cAAgBoM,EACrBzL,KAAKgE,cAAc,EAGrB0H,YAAeC,IACb3L,KAAKc,iBAAiB6K,GACtB3L,KAAKjB,iBAAmB,IAAKiB,KAAKjB,oBAAqB4M,GACvD3L,KAAKiG,OAAOC,YAAYC,MAAM,EAEhC7E,+BAAiC,KAC/BtB,KAAKsE,oBAAoB,EAG3BsH,QAAU,KACR5L,KAAKf,gBAAkB,KACvB,GAAIe,KAAKtB,QAAU,KAAM,CACvBsI,qBAAqBhH,KAAKtB,OAC1BsB,KAAKtB,MAAQ,IACnB,CACI,GAAIsB,KAAK1B,IAAM0B,KAAKzB,QAAS,CAC3ByB,KAAKb,SAASwD,SAASqF,IACrBhI,KAAK1B,GAAGmJ,cAAcO,EAAQ,IAEhChI,KAAKb,SAASqH,QACdxG,KAAK1B,GAAGuN,cAAc7L,KAAKzB,SAC3ByB,KAAKzB,QAAU,KACfyB,KAAK1B,GAAGsD,WAAW5B,KAAK1B,GAAGuD,aAAc,MACzC7B,KAAK1B,GAAGsD,WAAW5B,KAAK1B,GAAGwN,qBAAsB,MACjD9L,KAAK1B,GAAGyN,iBAAiB/L,KAAK1B,GAAG0N,aAAc,MAC/ChM,KAAK1B,GAAG2N,gBAAgBjM,KAAK1B,GAAG4N,YAAa,MAC7ClM,KAAK1B,GAAG4K,UACd,CACI,GAAIlJ,KAAKwD,eAAgB,CACvBxD,KAAKwD,eAAee,aACpBvE,KAAKwD,eAAiB,IAC5B,CACI,GAAIxD,KAAKsD,qBAAsB,CAC7BtD,KAAKsD,qBAAqBiB,aAC1BvE,KAAKsD,qBAAuB,IAClC,CACItC,gBAAgBmL,oBAAoB,SAAUnM,KAAKkB,4BACnDlB,KAAKN,cAAcyM,oBAAoB,mBAAoBnM,KAAKsB,gCAChEtB,KAAKxB,iBAAmB,GACxBwB,KAAK3B,cAAc+N,gBACZpM,KAAK5B,cAAciD,gBAAgB,EAG9C,SAASgL,EAAa/N,EAAIgO,EAAMC,GAC9B,MAAMC,EAASlO,EAAG+N,aAAaC,GAC/B,IAAKE,EAAQ,OAAO,KACpBlO,EAAGmO,aAAaD,EAAQD,GACxBjO,EAAGoO,cAAcF,GACjB,IAAKlO,EAAGqO,mBAAmBH,EAAQlO,EAAGsO,gBAAiB,CACrDvG,QAAQ4C,MAAM,4CAA8C3K,EAAGuO,iBAAiBL,IAChFlO,EAAGwO,aAAaN,GAChB,OAAO,IACX,CACE,OAAOA,CACT,CACA,SAASjL,EAAcjD,EAAIyO,EAAqBC,GAC9C,MAAMC,EAAS3O,EAAG4O,yBAAyB5O,EAAG6O,gBAAiB7O,EAAG8O,cAClE,MAAMC,EAAYJ,EAASA,EAAOI,UAAY,KAC9C,GAAIA,GAAaA,EAAY,GAAI,CAC/BN,EAAsBA,EAAoBO,QAAQ,uCAAwC,0BAC1FN,EAAuBA,EAAqBM,QAAQ,sCAAuC,yBAAyBA,QAAQ,0DAA2D,cAC3L,CACE,MAAMC,EAAelB,EAAa/N,EAAIA,EAAGkP,cAAeT,GACxD,MAAMtO,EAAiB4N,EAAa/N,EAAIA,EAAG6O,gBAAiBH,GAC5D,IAAKO,IAAiB9O,EAAgB,OAAO,KAC7C,MAAMF,EAAUD,EAAGiD,gBACnB,IAAKhD,EAAS,OAAO,KACrBD,EAAGmP,aAAalP,EAASgP,GACzBjP,EAAGmP,aAAalP,EAASE,GACzBH,EAAGoP,YAAYnP,GACf,IAAKD,EAAGqP,oBAAoBpP,EAASD,EAAGsP,aAAc,CACpDvH,QAAQ4C,MAAM,4CAA8C3K,EAAGuP,kBAAkBtP,IACjFD,EAAGuN,cAActN,GACjBD,EAAGwO,aAAaS,GAChBjP,EAAGwO,aAAarO,GAChB,OAAO,IACX,CACEH,EAAGwP,aAAavP,EAASgP,GACzBjP,EAAGwP,aAAavP,EAASE,GACzBH,EAAGwO,aAAaS,GAChBjP,EAAGwO,aAAarO,GAChB,OAAOF,CACT,CACA,MAAM+B,EAAe,kWAqBrB,SAASf,IACP,MAAMwO,EAAKC,UAAUC,UAAUC,cAC/B,OAAOH,EAAGjF,SAAS,YAAciF,EAAGjF,SAAS,YAAciF,EAAGjF,SAAS,UACzE,CACA,SAAS1D,EAAqB+I,GAC5B,MAAMC,EAAgBpN,gBAAgBgE,OAAS,EAC/C,MAAMqJ,EAAgBrN,gBAAgB6E,OAAShB,OAAOyJ,WACtD,MAAMC,EAAiB1J,OAAOyJ,WAAaH,EAAIK,gBAAgBC,YAC/D,MAAMH,EAAaF,EAAgBC,EAAgBE,EACnD,MAAMG,EAAQC,WAAaL,EAC3B,MAAMM,EAAwBjK,KAAKU,MAAM,IAAMqJ,GAC/C,GAAIE,EAAwB,IAAM,EAAG,CACnC,OAAOA,EAAwB,GACnC,CACE,GAAIA,IAA0B,GAAI,CAChC,OAAO,EAAI,CACf,CACE,GAAIA,IAA0B,GAAI,CAChC,OAAO,EAAI,CACf,CACE,GAAIA,IAA0B,IAAK,CACjC,OAAO,EAAI,CACf,CACE,OAAOF,CACT,CC7dA,MAAMG,EAAmB,CACvBC,KAAM,EACNC,QAAS,EACTC,MAAO,GCzBT,MAAMC,EAAY,sEAIlB,MAAMC,EAAY,oGA0BlB,MAAMC,EAAqB,4HA4C3B,MAAMC,EAAa,0oCCxEnB,MAAMC,EAA6B,46BA0CjCJ,MACAC,MACAC,2gCA2CAC,g3ICzFF,SAASE,EAAyBC,GAChC,GAAI3F,MAAMC,QAAQ0F,GAAc,CAC9B,GAAIA,EAAYzF,SAAW,EAAG,OAAOyF,EACrC,GAAIA,EAAYzF,SAAW,EAAG,MAAO,IAAIyF,EAAa,GACtD,OAAOC,CACX,CACE,UAAWD,IAAgB,SAAU,CACnC,OAAOC,CACX,CACE,IAAIC,EAAGC,EAAG/F,EAAGD,EAAI,EACjB,GAAI6F,EAAYI,WAAW,KAAM,EAC9BF,EAAGC,EAAG/F,EAAGD,GAAKkG,EAAUL,EAC7B,MAAS,GAAIA,EAAYI,WAAW,OAAQ,CACxC,MAAME,EAAOC,EAAUP,GACvB,GAAIM,IAAS,KAAM,OAAOL,GACzBC,EAAGC,EAAG/F,EAAGD,GAAKmG,CACnB,MAAS,GAAIN,EAAYI,WAAW,OAAQ,CACxC,MAAMI,EAAOC,EAAUT,GACvB,GAAIQ,IAAS,KAAM,OAAOP,GACzBC,EAAGC,EAAG/F,EAAGD,GAAKuG,EAAWF,EAC9B,KAAS,CACL1J,QAAQ4C,MAAM,2BAA4BsG,GAC1C,OAAOC,CACX,CACE,MAAO,CAACU,EAAMT,EAAG,EAAG,GAAIS,EAAMR,EAAG,EAAG,GAAIQ,EAAMvG,EAAG,EAAG,GAAIuG,EAAMxG,EAAG,EAAG,GACtE,CACA,SAASkG,EAAUO,GACjBA,EAAMA,EAAI7C,QAAQ,KAAM,IACxB,GAAI6C,EAAIrG,SAAW,GAAKqG,EAAIrG,SAAW,EAAG,CACxCqG,EAAMA,EAAIC,MAAM,IAAIC,KAAKC,GAASA,EAAOA,IAAMC,KAAK,GACxD,CACE,GAAIJ,EAAIrG,SAAW,EAAG,CACpBqG,EAAMA,EAAM,IAChB,CACE,IAAK,iBAAiBK,KAAKL,GAAM,CAC/B9J,QAAQC,KAAK,qBACb,OAAOkJ,CACX,CACE,MAAMC,EAAIgB,SAASN,EAAI9F,MAAM,EAAG,GAAI,IAAM,IAC1C,MAAMqF,EAAIe,SAASN,EAAI9F,MAAM,EAAG,GAAI,IAAM,IAC1C,MAAMV,EAAI8G,SAASN,EAAI9F,MAAM,EAAG,GAAI,IAAM,IAC1C,MAAMX,EAAI+G,SAASN,EAAI9F,MAAM,EAAG,GAAI,IAAM,IAC1C,MAAO,CAACoF,EAAGC,EAAG/F,EAAGD,EACnB,CACA,SAASoG,EAAUD,GACjB,MAAMa,EAAQb,EAAKa,MAAM,2EACzB,IAAKA,EAAO,OAAO,KACnB,MAAO,CACLD,SAASC,EAAM,IAAM,KAAO,IAC5BD,SAASC,EAAM,IAAM,KAAO,IAC5BD,SAASC,EAAM,IAAM,KAAO,IAC5BA,EAAM,UAAO,EAAS,EAAIC,WAAWD,EAAM,IAE/C,CACA,SAASV,EAAUD,GACjB,MAAMW,EAAQX,EAAKW,MAAM,6EACzB,IAAKA,EAAO,OAAO,KACnB,MAAO,CACLD,SAASC,EAAM,IAAM,KACrBD,SAASC,EAAM,IAAM,KACrBD,SAASC,EAAM,IAAM,KACrBA,EAAM,UAAO,EAAS,EAAIC,WAAWD,EAAM,IAE/C,CACA,SAAST,EAAWF,GAClB,MAAOa,EAAGC,EAAGC,EAAGpH,GAAKqG,EACrB,MAAMgB,EAAWH,EAAI,IACrB,MAAMI,EAAWH,EAAI,IACrB,MAAMI,EAAWH,EAAI,IACrB,IAAIrB,EAAGC,EAAG/F,EACV,GAAIkH,IAAM,EAAG,CACXpB,EAAIC,EAAI/F,EAAIsH,CAChB,KAAS,CACL,MAAMC,EAAU,CAACC,EAAIC,EAAIC,KACvB,GAAIA,EAAI,EAAGA,GAAK,EAChB,GAAIA,EAAI,EAAGA,GAAK,EAChB,GAAIA,EAAI,EAAI,EAAG,OAAOF,GAAMC,EAAKD,GAAM,EAAIE,EAC3C,GAAIA,EAAI,EAAI,EAAG,OAAOD,EACtB,GAAIC,EAAI,EAAI,EAAG,OAAOF,GAAMC,EAAKD,IAAO,EAAI,EAAIE,GAAK,EACrD,OAAOF,CAAE,EAEX,MAAMG,EAAIL,EAAW,GAAMA,GAAY,EAAID,GAAYC,EAAWD,EAAWC,EAAWD,EACxF,MAAMO,EAAI,EAAIN,EAAWK,EACzB7B,EAAIyB,EAAQK,EAAGD,EAAGP,EAAW,EAAI,GACjCrB,EAAIwB,EAAQK,EAAGD,EAAGP,GAClBpH,EAAIuH,EAAQK,EAAGD,EAAGP,EAAW,EAAI,EACrC,CACE,MAAO,CAACtB,EAAGC,EAAG/F,EAAGD,EACnB,CACA,MAAMwG,EAAQ,CAACsB,EAAG/L,EAAKb,IAAQD,KAAKc,IAAId,KAAKC,IAAI4M,EAAG/L,GAAMb,GAC1D,MAAM4K,EAAgB,CAAC,GAAK,GAAK,GAAK,GC1FtC,SAASiC,IACP,UAAW5M,SAAW,YAAa,CACjC,YAAO,CACX,CACE,MAAM6M,EAAM,IAAIC,MAChBD,EAAItH,IAAMwH,EACV,OAAOF,CACT,CACA,MAAME,EAAW,ittBCRjB,MAAMC,EAAa,6ECkCZ,MAAMC,EAA4E,CACvFC,WAAY,UACZC,UAAW,UACXC,SAAU,GACVC,UAAW,GACXC,MAAO,GACPC,UAAW,GACXC,SAAU,GACVC,YAAa,IACbC,MAAO,IACPC,UAAW,EACXC,KAAM,EACNC,MAAO,GACPC,KAAM,IACNC,IAAK,QACL5N,MAAO,GACP6N,SAAU,EACVC,QAAS,GACTC,QAAS,GACTC,QAAS,EACTC,QAAS,EACTC,WAAY,EACZC,YAAa,EACbtU,MAAO,EACPiB,MAAO,EACPT,cAAe,EACfC,cAAe,KAAO,KAAO,EAC7B8T,QAAS,GClEX,MAAMC,EAAkB,IAAM,8aCY9B,IAAIC,EACJ,IAAIC,EAEJ,SAASC,EAAapM,GACpB,GAAIA,EAAMC,UAAYD,EAAME,aAAe,EAAG,OAAOmM,QAAQC,QAAQtM,GAErE,OAAO,IAAIqM,SAAQ,CAACC,EAASC,KAC3B,MAAMC,EAAS,KACbC,IACAH,EAAQtM,EAAM,EAEhB,MAAM0M,EAAU,KACdD,IACAF,EAAO,IAAI1T,MAAM,uCAAuCmH,EAAMgD,OAAO,EAEvE,MAAMyJ,EAAU,KACdzM,EAAM+E,oBAAoB,OAAQyH,GAClCxM,EAAM+E,oBAAoB,QAAS2H,EAAQ,EAG7C1M,EAAMnG,iBAAiB,OAAQ2S,EAAQ,CAAEG,KAAM,OAC/C3M,EAAMnG,iBAAiB,QAAS6S,EAAS,CAAEC,KAAM,MAAO,GAE5D,CAEA,SAASC,EAAUzH,GACjB,GAAIA,aAAkBzJ,iBAAkB,OAAO0Q,EAAajH,GAE5D,MAAMnF,EAAQ,IAAIuK,MAClB,GAAIpF,GAAUA,IAAWsF,EAAYzK,EAAM6M,YAAc,YACzD7M,EAAMgD,IAAMmC,GAAUsF,EACtB,OAAO2B,EAAapM,EACtB,CAEA,SAAS8M,IACPZ,MAAsBU,EAAUnC,IAChC,OAAOyB,CACT,CAEA,SAASa,IACPZ,MAAwBE,QAAQC,QAAQjC,KAAyB2C,MAAKhN,IACpE,IAAKA,EAAO,MAAM,IAAInH,MAAM,8CAC5B,OAAOuT,EAAapM,EAAM,KAE5B,OAAOmM,CACT,C,MAOac,EAAYC,EAAA,MAAAD,UAAAE,EALzB,WAAA5U,CAAA6U,G,4CASUxU,KAAAyU,OAA6B,GAG7BzU,KAAA0U,eAAiB,EACjB1U,KAAA2U,UAAY,KAqHrB,CAnHC,gBAAAC,GACE5U,KAAK2U,UAAY,UACZ3U,KAAK6U,Y,CAGZ,oBAAAC,GACE9U,KAAK0U,gBAAkB,EACvB1U,KAAK+U,e,CAIP,cAAAC,GACE,GAAIhV,KAAK2U,eAAgB3U,KAAK6U,Y,CAGxB,cAAAI,GAEN,MAAO,IACFnD,KACC9R,KAAKyU,QAAU,G,CAIf,gBAAMI,GACZ,MAAMK,IAAelV,KAAK0U,eAC1B,MAAMD,EAASzU,KAAKiV,iBAEpB,IACE,MAAO7N,EAAO+N,SAAsB1B,QAAQ2B,IAAI,CAC9CpB,EAAUS,EAAOrN,OAAOiO,OAAM,IAAMnB,MACpCC,MAGF,GAAIe,IAAelV,KAAK0U,iBAAmB1U,KAAKsV,GAAGC,YAAa,OAEhE,MAAM3V,EAAWI,KAAKwV,cAAcf,EAAQrN,EAAO+N,GACnD,MAAMM,EAAezV,KAAKsV,GAAGpV,cAA2B,yBACxD,IAAKuV,EAAc,OAEnB,IAAKzV,KAAK0V,YAAa,CACrB1V,KAAK0V,YAAc,IAAIvX,EACrBsX,EACApG,EACAzP,EACA+V,UACAlB,EAAO5V,MACP4V,EAAO3U,MACP2U,EAAOpV,cACPoV,EAAOnV,cACP,CAAC,W,KAEE,CACLU,KAAK0V,YAAYhK,YAAY9L,GAC7BI,KAAK0V,YAAYtU,SAASqT,EAAO5V,OACjCmB,KAAK0V,YAAYzK,SAASwJ,EAAO3U,OACjCE,KAAK0V,YAAYlK,iBAAiBiJ,EAAOpV,eACzCW,KAAK0V,YAAYpK,iBAAiBmJ,EAAOnV,c,CAG3CU,KAAKsV,GAAGM,gBAAgB,2B,CACxB,MAAO3M,GACP,GAAIiM,IAAelV,KAAK0U,eAAgB,OACxC1U,KAAK+U,gBACL/U,KAAKsV,GAAGpV,cAA2B,0BAA0B2V,kBAC7D7V,KAAKsV,GAAG/U,aAAa,2BAA4B,eACjD8F,QAAQC,KAAK,uDAAwD2C,E,EAIjE,aAAAuM,CACNf,EACArN,EACA+N,GAEA,MAAO,CACLW,QAAS1O,EACT2O,eAAgBZ,EAChBa,aAAc1G,EAAyBmF,EAAO1C,YAC9CkE,YAAa3G,EAAyBmF,EAAOzC,WAC7CkE,WAAYzB,EAAOxC,SACnBkE,YAAa1B,EAAOvC,UACpBkE,QAAS3B,EAAOtC,MAChBkE,YAAa5B,EAAOrC,UACpBkE,WAAY7B,EAAOpC,SACnBkE,cAAe9B,EAAOnC,YACtBkE,YAAa/B,EAAOjC,UACpBiE,QAAShC,EAAOlC,MAChBmE,OAAQjC,EAAOhC,KACfkE,QAASlC,EAAO/B,MAChBkE,OAAQnC,EAAO9B,KACfkE,MAAOhI,EAAiB4F,EAAO7B,KAC/BkE,QAASrC,EAAOzP,MAChB+R,WAAYtC,EAAO5B,SACnBmE,UAAWvC,EAAOzB,QAClBiE,UAAWxC,EAAOxB,QAClBiE,UAAWzC,EAAO3B,QAClBqE,UAAW1C,EAAO1B,QAClBqE,aAAc3C,EAAOvB,WACrBmE,cAAe5C,EAAOtB,Y,CAIlB,aAAA4B,GACN/U,KAAK0V,aAAa9J,UAClB5L,KAAK0V,YAAcC,S,CAGrB,MAAA1P,GACE,MAAMwO,EAASzU,KAAKiV,iBACpB,OACErE,EAAC0G,EAAI,CAAA1U,IAAA,yDAAa,OAAO2U,MAAO,CAAE,6BAA8BC,OAAO/C,EAAOrB,WAC5ExC,EAAA,OAAAhO,IAAA,2CAAK6U,MAAM,yB","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["inputCss","ICON_SIZE","lg","md","sm","xs","CLEAR_BUTTON_SIZE","idCounter","Input","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","generatedId","errorId","value","disabled","readOnly","required","requiredMessage","DEFAULT_REQUIRED_MESSAGE","clearLabel","type","inputMode","enterKeyHint","size","width","hasBorder","isInactive","autoFocus","error","ariaLabel","initialValue","formDisabled","hasSuffix","focused","touched","handleInput","e","target","dsChange","emit","handleFocus","handleBlur","handleClear","dsClear","el","querySelector","focus","componentWillLoad","Boolean","syncFormValue","componentDidRender","inactive","setFormControlValue","internals","missing","length","setRequiredValidity","formDisabledCallback","formResetCallback","formStateRestoreCallback","state","restoreStringFormState","setFocus","render","inputId","filled","dirty","showClear","showError","errorMessage","textVariant","CONTROL_TEXT_VARIANT","iconSize","describedBy","ariaDescribedby","undefined","filter","join","h","Host","key","class","controlWidthClass","icon","name","color","id","placeholder","autoComplete","replace","ariaLabelledby","onInput","onFocus","onBlur","variant","rounded","onDsClick","as","textId","role"],"sources":["src/wc/components/Input/Input.css?tag=ds-input&encapsulation=scoped","src/wc/components/Input/Input.tsx"],"sourcesContent":["@import '../../utils/interaction-fill.css';\n@import '../../utils/control-inactive.css';\n@import '../../utils/control-density.css';\n@import '../../utils/control-parts.css';\n@import '../../utils/control-width.css';\n@import '../../utils/field-stack.css';\n@import '../../utils/typography.css';\n@import '../../utils/forced-colors.css';\n\n:host(.input-host) {\n display: inline-flex;\n --ds-input-fg: var(--color-foreground-primary);\n --ds-input-placeholder: var(--color-foreground-secondary);\n --ds-input-placeholder-active: var(--color-foreground-quaternary);\n --ds-input-adornment-fg: var(--color-foreground-secondary);\n --ds-input-border: var(--color-border-secondary);\n}\n\n:host(.ds-control-width--fill),\n:host(.ds-control-width--fill) .input-control {\n width: 100%;\n}\n\n.input-control {\n overflow: hidden;\n background: transparent;\n border: none;\n border-radius: var(--ds-control-radius, var(--dimension-radius-025));\n color: var(--ds-input-fg);\n}\n\n.input-control--bordered {\n --ds-interaction-border-width: var(--dimension-stroke-width-012);\n --ds-interaction-border-color: var(--ds-input-border);\n}\n\n.input-control--error {\n --ds-interaction-border-width: var(--dimension-stroke-width-018);\n --ds-interaction-border-color: var(--color-border-bold-negative);\n}\n\n.input-control--bordered:focus-within:not(.input-control--error) {\n --ds-interaction-border-width: var(--dimension-stroke-width-018);\n --ds-interaction-border-color: var(--color-border-bold-brand);\n}\n\n:host(.ds-control-inactive) .input-control::after {\n background: transparent;\n}\n\n.native-input {\n position: relative;\n z-index: 2;\n flex: 1 1 auto;\n min-width: 0;\n height: 100%;\n background: transparent;\n border: none;\n border-radius: inherit;\n outline: none;\n color: var(--ds-input-fg);\n font-family: inherit;\n -webkit-appearance: none;\n appearance: none;\n}\n\n.native-input:disabled {\n cursor: not-allowed;\n}\n\n.native-input:read-only:not(:disabled) {\n cursor: default;\n}\n\n.native-input::placeholder {\n color: var(--ds-input-placeholder);\n}\n\n.native-input:focus::placeholder {\n color: var(--ds-input-placeholder-active);\n}\n\n.native-input[type='search']::-webkit-search-cancel-button,\n.native-input[type='search']::-webkit-search-decoration {\n display: none;\n}\n\n.input-control__prefix,\n.input-control__suffix {\n position: relative;\n z-index: 2;\n color: var(--ds-input-adornment-fg);\n}\n\n.input-control__suffix--empty {\n display: none;\n}\n\n/* Keep this more specific than ButtonUnfilled's host-level hug alignment so\n component stylesheet hydration order cannot move the nested action. */\n.input-control > .input-control__clear {\n position: relative;\n z-index: 2;\n flex-shrink: 0;\n align-self: center;\n}\n\n.input-control.ds-control--lg:has(.input-control__clear),\n.input-control.ds-control--md:has(.input-control__clear),\n.input-control.ds-control--sm:has(.input-control__clear) {\n padding-right: var(--dimension-space-050);\n}\n\n.input-control.ds-control--xs:has(.input-control__clear) {\n padding-right: 0;\n}\n\n.error-text {\n width: 100%;\n}\n\n@media (forced-colors: active) {\n .input-control--bordered:focus-within:not(.input-control--error)::after {\n outline-color: var(--ds-forced-color-selected);\n }\n\n .input-control--error::after {\n outline-style: dashed;\n }\n}\n","import { AttachInternals, Component, Prop, State, Event, EventEmitter, Element, Method, Watch, h, Host } from '@stencil/core';\nimport {\n controlWidthClass,\n CONTROL_TEXT_VARIANT,\n DEFAULT_REQUIRED_MESSAGE,\n restoreStringFormState,\n setFormControlValue,\n setRequiredValidity,\n type ControlWidth,\n} from '../../utils';\n\nexport type InputType = 'text' | 'email' | 'tel' | 'url' | 'search' | 'password';\nexport type InputSize = 'lg' | 'md' | 'sm' | 'xs';\nexport type InputWidth = ControlWidth;\n\nconst ICON_SIZE: Record<InputSize, 'lg' | 'md' | 'sm' | 'xs'> = {\n lg: 'lg',\n md: 'md',\n sm: 'sm',\n xs: 'xs',\n};\n\nconst CLEAR_BUTTON_SIZE: Record<InputSize, 'md' | 'sm' | 'xs'> = {\n lg: 'md',\n md: 'sm',\n sm: 'xs',\n xs: 'xs',\n};\n\nlet idCounter = 0;\n\n@Component({\n tag: 'ds-input',\n styleUrl: 'Input.css',\n scoped: true,\n formAssociated: true,\n})\nexport class Input {\n @Element() el!: HTMLElement;\n @AttachInternals() internals!: ElementInternals;\n\n private generatedId = `ds-input-${++idCounter}`;\n private errorId = `${this.generatedId}-error`;\n\n @Prop({ mutable: true }) value: string = '';\n @Prop({ reflect: true }) name: string | undefined;\n @Prop({ reflect: true }) form: string | undefined;\n @Prop({ reflect: true }) disabled: boolean = false;\n /** Keeps the value focusable and submittable while preventing edits. */\n @Prop({ reflect: true }) readOnly: boolean = false;\n @Prop({ reflect: true }) required: boolean = false;\n @Prop() requiredMessage: string = DEFAULT_REQUIRED_MESSAGE;\n @Prop() clearLabel: string = 'Clear';\n @Prop() placeholder: string | undefined;\n @Prop() type: InputType = 'text';\n /** Native browser autofill hint. */\n @Prop({ attribute: 'autocomplete' }) autoComplete: string | undefined;\n /** Preferred virtual keyboard without changing the value semantics. */\n @Prop({ attribute: 'inputmode' }) inputMode: string = '';\n /** Preferred virtual-keyboard action label. */\n @Prop({ attribute: 'enterkeyhint' }) enterKeyHint: string = '';\n /** Control density. */\n @Prop() size: InputSize = 'md';\n /** Width fit — fill the parent (default) or hug the available content. */\n @Prop() width: InputWidth = 'fill';\n /** Show the standard inset border, including focused and invalid strokes. */\n @Prop() hasBorder: boolean = true;\n /** Optional leading icon name. */\n @Prop() icon: string | undefined;\n @Prop() isInactive: boolean = false;\n @Prop() autoFocus: boolean = false;\n @Prop() error: boolean = false;\n @Prop() errorMessage: string | undefined;\n /** Associates the internal input with an external <label>. */\n @Prop() inputId: string | undefined;\n @Prop({ attribute: 'aria-label' }) ariaLabel: string | null = null;\n @Prop({ attribute: 'aria-labelledby' }) ariaLabelledby: string | undefined;\n @Prop({ attribute: 'aria-describedby' }) ariaDescribedby: string | undefined;\n\n @Event() dsChange!: EventEmitter<string>;\n @Event() dsClear!: EventEmitter<void>;\n\n private initialValue = '';\n @State() private formDisabled = false;\n @State() private hasSuffix = false;\n @State() private focused = false;\n @State() private touched = false;\n\n componentWillLoad() {\n this.initialValue = this.value;\n this.hasSuffix = Boolean(this.el.querySelector('[slot=\"suffix\"]'));\n this.syncFormValue();\n }\n\n componentDidRender() {\n const hasSuffix = Boolean(this.el.querySelector('[slot=\"suffix\"]'));\n if (hasSuffix !== this.hasSuffix) this.hasSuffix = hasSuffix;\n }\n\n @Watch('value')\n @Watch('disabled')\n @Watch('isInactive')\n @Watch('required')\n syncFormValue() {\n const inactive = this.isInactive || this.disabled || this.formDisabled;\n setFormControlValue(this.internals, this.value, { inactive });\n const missing = this.required && !inactive && this.value.length === 0;\n setRequiredValidity(this.internals, missing, this.requiredMessage);\n }\n\n formDisabledCallback(disabled: boolean) {\n this.formDisabled = disabled;\n this.syncFormValue();\n }\n\n formResetCallback() {\n this.value = this.initialValue;\n }\n\n formStateRestoreCallback(state: string | File | FormData | null) {\n this.value = restoreStringFormState(state);\n }\n\n @Method()\n async setFocus() {\n this.el.querySelector('input')?.focus();\n }\n\n private handleInput = (e: Event) => {\n this.value = (e.target as HTMLInputElement).value;\n this.dsChange.emit(this.value);\n };\n\n private handleFocus = () => {\n this.focused = true;\n };\n\n private handleBlur = () => {\n this.focused = false;\n this.touched = true;\n };\n\n private handleClear = () => {\n this.value = '';\n this.dsChange.emit('');\n this.dsClear.emit();\n this.el.querySelector('input')?.focus();\n };\n\n render() {\n const inputId = this.inputId ?? this.generatedId;\n const inactive = this.isInactive || this.disabled || this.formDisabled;\n const filled = this.value.length > 0;\n const dirty = this.value !== this.initialValue;\n const showClear = this.type === 'search' && filled && !inactive && !this.readOnly;\n const showError = this.error && Boolean(this.errorMessage);\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const iconSize = ICON_SIZE[this.size];\n\n const describedBy = [\n this.ariaDescribedby,\n showError ? this.errorId : undefined,\n ].filter(Boolean).join(' ') || undefined;\n\n return (\n <Host\n class={{\n 'input-host': true,\n 'ds-field-stack': true,\n 'ds-control-inactive': inactive,\n [`ds-control--${this.size}`]: true,\n ...controlWidthClass(this.width),\n }}\n data-disabled={inactive ? '' : undefined}\n data-readonly={this.readOnly ? '' : undefined}\n data-required={this.required ? '' : undefined}\n data-invalid={this.error ? '' : undefined}\n data-filled={filled ? '' : undefined}\n data-focused={this.focused ? '' : undefined}\n data-dirty={dirty ? '' : undefined}\n data-touched={this.touched ? '' : undefined}\n >\n <div\n class={{\n 'input-control': true,\n 'ds-control-frame': true,\n 'input-control--bordered': this.hasBorder,\n 'input-control--error': this.hasBorder && this.error,\n 'ds-interaction-fill': true,\n [`ds-control--${this.size}`]: true,\n }}\n >\n {this.icon && (\n <span class=\"input-control__prefix ds-control-icon-box ds-interaction-fill__content\" aria-hidden=\"true\">\n <ds-icon name={this.icon} size={iconSize} color=\"inherit\" />\n </span>\n )}\n <input\n type={this.type}\n id={inputId}\n value={this.value}\n placeholder={this.placeholder}\n disabled={inactive}\n readOnly={this.readOnly}\n required={this.required}\n autoFocus={this.autoFocus}\n autoComplete={this.autoComplete}\n inputMode={this.inputMode || undefined}\n enterKeyHint={this.enterKeyHint || undefined}\n class={`native-input ds-control-label-box ds-text--${textVariant.replace('text-', '')} ds-text--regular ds-interaction-fill__content`}\n aria-label={this.ariaLabel}\n aria-labelledby={this.ariaLabelledby}\n aria-describedby={describedBy}\n aria-invalid={this.error ? 'true' : undefined}\n onInput={this.handleInput}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n />\n <span class={{ 'input-control__suffix': true, 'ds-control-icon-box': true, 'input-control__suffix--empty': !this.hasSuffix }}>\n <slot name=\"suffix\" />\n </span>\n {showClear && (\n <ds-button-unfilled\n class=\"input-control__clear\"\n variant=\"icon\"\n size={CLEAR_BUTTON_SIZE[this.size]}\n icon=\"CrossCircle\"\n hasBorder={false}\n rounded\n ariaLabel={this.clearLabel}\n onDsClick={this.handleClear}\n />\n )}\n </div>\n {showError && (\n <ds-text\n class=\"error-text\"\n as=\"div\"\n variant=\"text-body-small\"\n color=\"negative\"\n textId={this.errorId}\n role=\"alert\"\n >\n {this.errorMessage}\n </ds-text>\n )}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|