@weapp-vite/web 1.4.13 → 1.4.14
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/runtime/appShell/tabBar/index.mjs.map +1 -1
- package/dist/runtime/button/index.mjs.map +1 -1
- package/dist/runtime/component/element.mjs.map +1 -1
- package/dist/runtime/nativeComponents/canvas/index.mjs.map +1 -1
- package/dist/runtime/nativeComponents/checkbox.mjs.map +1 -1
- package/dist/runtime/nativeComponents/form.mjs.map +1 -1
- package/dist/runtime/nativeComponents/icon/index.mjs.map +1 -1
- package/dist/runtime/nativeComponents/image.mjs.map +1 -1
- package/dist/runtime/nativeComponents/input.mjs.map +1 -1
- package/dist/runtime/nativeComponents/label.mjs.map +1 -1
- package/dist/runtime/nativeComponents/movable/index.mjs.map +1 -1
- package/dist/runtime/nativeComponents/navigator.mjs.map +1 -1
- package/dist/runtime/nativeComponents/picker/index.mjs.map +1 -1
- package/dist/runtime/nativeComponents/pickerView/column.mjs.map +1 -1
- package/dist/runtime/nativeComponents/pickerView/index.mjs.map +1 -1
- package/dist/runtime/nativeComponents/progress/index.mjs.map +1 -1
- package/dist/runtime/nativeComponents/radio.mjs.map +1 -1
- package/dist/runtime/nativeComponents/richText/index.mjs.map +1 -1
- package/dist/runtime/nativeComponents/scrollView.mjs.map +1 -1
- package/dist/runtime/nativeComponents/slider/index.mjs.map +1 -1
- package/dist/runtime/nativeComponents/swiper/index.mjs.map +1 -1
- package/dist/runtime/nativeComponents/switch.mjs.map +1 -1
- package/dist/runtime/nativeComponents/textarea.mjs.map +1 -1
- package/dist/runtime/nativeComponents/video/index.mjs.map +1 -1
- package/dist/runtime/navigationBar/index.mjs.map +1 -1
- package/dist/runtime/polyfill/animation.mjs.map +1 -1
- package/dist/runtime/polyfill/routeRuntime/appLifecycle.mjs.map +1 -1
- package/dist/runtime/polyfill/routeRuntime/stack.mjs.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["#rangePropertySet","#rangeValue","#syncExternalValue","#valuePropertySet","#valueValue","#committedValue","#ensureStructure","#initialValueCaptured","#initialValue","#handleHostClick","#handleHostKeydown","#close","#open","#backdrop","#draftValue","#renderEditors","#confirm","#panel","#editors","#title"],"sources":["../../../../src/runtime/nativeComponents/picker/index.ts"],"sourcesContent":["import { getNativeComponentDescriptor } from '../../../shared/nativeComponents'\nimport { connectFormControl, disconnectFormControl } from '../formControl'\nimport { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from '../helpers'\nimport { ensureNativeComponentStyle } from '../style'\nimport { currentDateValue, renderPickerEditors } from './editors'\nimport {\n createPickerChangeDetail,\n normalizePickerIndex,\n normalizePickerIndexes,\n resolvePickerColumns,\n resolvePickerMode,\n} from './helpers'\nimport { PICKER_SHADOW_STYLE } from './style'\n\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nfunction parsePickerAttribute(value: string | null): unknown {\n if (value === null || value === '') {\n return value ?? undefined\n }\n try {\n return JSON.parse(value) as unknown\n }\n catch {\n return value\n }\n}\n\nfunction clonePickerValue(value: unknown): unknown {\n return Array.isArray(value) ? value.map(item => clonePickerValue(item)) : value\n}\n\nexport class WeappPicker extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('picker')!.attributes]\n\n #rangeValue: unknown = []\n #rangePropertySet = false\n #valueValue: unknown\n #valuePropertySet = false\n #committedValue: unknown\n #draftValue: unknown\n #initialValue: unknown\n #initialValueCaptured = false\n #backdrop?: HTMLDivElement\n #panel?: HTMLDivElement\n #editors?: HTMLDivElement\n #title?: HTMLDivElement\n #open = false\n\n get range() {\n return this.#rangePropertySet\n ? this.#rangeValue\n : parsePickerAttribute(this.getAttribute('range')) ?? []\n }\n\n set range(value: unknown) {\n this.#rangePropertySet = true\n this.#rangeValue = value\n this.#syncExternalValue()\n }\n\n get value() {\n return this.#valuePropertySet\n ? this.#valueValue\n : parsePickerAttribute(this.getAttribute('value'))\n }\n\n set value(value: unknown) {\n this.#valuePropertySet = true\n this.#valueValue = value\n this.#syncExternalValue()\n }\n\n get disabled() {\n return readBooleanAttribute(this, 'disabled')\n }\n\n get formControlName() {\n return this.getAttribute('name') ?? ''\n }\n\n get formControlValue() {\n return clonePickerValue(this.#committedValue)\n }\n\n get formControlDisabled() {\n return this.disabled\n }\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n this.#ensureStructure()\n this.#syncExternalValue()\n if (!this.#initialValueCaptured) {\n this.#initialValue = clonePickerValue(this.#committedValue)\n this.#initialValueCaptured = true\n }\n this.addEventListener('click', this.#handleHostClick)\n this.addEventListener('keydown', this.#handleHostKeydown)\n if (!this.hasAttribute('tabindex')) {\n this.tabIndex = 0\n }\n connectFormControl(this)\n }\n\n disconnectedCallback() {\n this.removeEventListener('click', this.#handleHostClick)\n this.removeEventListener('keydown', this.#handleHostKeydown)\n disconnectFormControl(this)\n }\n\n attributeChangedCallback() {\n this.#syncExternalValue()\n }\n\n formActivate() {\n this.open()\n }\n\n formReset() {\n this.#committedValue = clonePickerValue(this.#initialValue)\n this.#close(false)\n }\n\n open() {\n if (this.disabled || this.#open || !this.#backdrop) {\n return\n }\n this.#draftValue = clonePickerValue(this.#committedValue)\n this.#renderEditors()\n this.#backdrop.hidden = false\n this.#open = true\n }\n\n #ensureStructure() {\n if (this.#backdrop || typeof document === 'undefined') {\n return\n }\n const root = this.shadowRoot ?? this.attachShadow({ mode: 'open' })\n const style = document.createElement('style')\n style.textContent = PICKER_SHADOW_STYLE\n const slot = document.createElement('slot')\n const backdrop = document.createElement('div')\n backdrop.className = 'backdrop'\n backdrop.hidden = true\n const panel = document.createElement('div')\n panel.className = 'panel'\n panel.setAttribute('role', 'dialog')\n panel.setAttribute('aria-modal', 'true')\n const toolbar = document.createElement('div')\n toolbar.className = 'toolbar'\n const cancel = document.createElement('button')\n cancel.type = 'button'\n cancel.textContent = '取消'\n const title = document.createElement('div')\n title.className = 'title'\n const confirm = document.createElement('button')\n confirm.type = 'button'\n confirm.textContent = '确定'\n const editors = document.createElement('div')\n editors.className = 'editors'\n toolbar.append(cancel, title, confirm)\n panel.append(toolbar, editors)\n backdrop.append(panel)\n root.append(style, slot, backdrop)\n cancel.addEventListener('click', () => this.#close(true))\n confirm.addEventListener('click', () => this.#confirm())\n backdrop.addEventListener('click', (event) => {\n if (event.target === backdrop) {\n event.stopPropagation()\n this.#close(true)\n }\n })\n this.#backdrop = backdrop\n this.#panel = panel\n this.#editors = editors\n this.#title = title\n }\n\n #syncExternalValue() {\n const mode = resolvePickerMode(this.getAttribute('mode'))\n const external = this.value\n if (mode === 'selector') {\n const columns = resolvePickerColumns(this.range, mode, this.getAttribute('range-key') ?? undefined)\n this.#committedValue = normalizePickerIndex(external, columns[0]!.length)\n }\n else if (mode === 'multiSelector') {\n const columns = resolvePickerColumns(this.range, mode, this.getAttribute('range-key') ?? undefined)\n this.#committedValue = normalizePickerIndexes(external, columns.map(column => column.length))\n }\n else if (mode === 'date') {\n this.#committedValue = typeof external === 'string' && external\n ? external\n : currentDateValue(this.getAttribute('fields') ?? undefined)\n }\n else if (mode === 'time') {\n this.#committedValue = typeof external === 'string' ? external : ''\n }\n else {\n this.#committedValue = Array.isArray(external) ? external.map(item => String(item ?? '')) : []\n }\n if (this.#open) {\n this.#draftValue = clonePickerValue(this.#committedValue)\n this.#renderEditors()\n }\n }\n\n #renderEditors() {\n if (!this.#editors || typeof document === 'undefined') {\n return\n }\n const mode = resolvePickerMode(this.getAttribute('mode'))\n this.#title!.textContent = this.getAttribute('header-text') ?? ''\n const controls = renderPickerEditors({\n mode,\n range: this.range,\n rangeKey: this.getAttribute('range-key') ?? undefined,\n value: this.#draftValue,\n fields: this.getAttribute('fields') ?? undefined,\n start: this.getAttribute('start') ?? undefined,\n end: this.getAttribute('end') ?? undefined,\n customItem: this.getAttribute('custom-item') ?? undefined,\n level: this.getAttribute('level') ?? undefined,\n onValueChange: (value) => {\n this.#draftValue = value\n },\n onColumnChange: (column, value) => {\n dispatchMiniProgramEvent(this, 'columnchange', { column, value })\n },\n })\n this.#editors.replaceChildren(...controls)\n }\n\n #confirm() {\n const mode = resolvePickerMode(this.getAttribute('mode'))\n this.#committedValue = clonePickerValue(this.#draftValue)\n this.#close(false)\n dispatchMiniProgramEvent(this, 'change', createPickerChangeDetail(mode, clonePickerValue(this.#committedValue)))\n }\n\n #close(cancelled: boolean) {\n if (!this.#open || !this.#backdrop) {\n return\n }\n this.#backdrop.hidden = true\n this.#open = false\n if (cancelled) {\n dispatchMiniProgramEvent(this, 'cancel', {})\n }\n }\n\n #handleHostClick = (event: MouseEvent) => {\n if (this.#panel && event.composedPath().includes(this.#panel)) {\n return\n }\n this.open()\n }\n\n #handleHostKeydown = (event: KeyboardEvent) => {\n if (event.key !== 'Enter' && event.key !== ' ') {\n return\n }\n event.preventDefault()\n this.open()\n }\n}\n\nexport * from './helpers'\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/runtime/nativeComponents/picker/index.ts"],"sourcesContent":["import { getNativeComponentDescriptor } from '../../../shared/nativeComponents'\nimport { connectFormControl, disconnectFormControl } from '../formControl'\nimport { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from '../helpers'\nimport { ensureNativeComponentStyle } from '../style'\nimport { currentDateValue, renderPickerEditors } from './editors'\nimport {\n createPickerChangeDetail,\n normalizePickerIndex,\n normalizePickerIndexes,\n resolvePickerColumns,\n resolvePickerMode,\n} from './helpers'\nimport { PICKER_SHADOW_STYLE } from './style'\n\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nfunction parsePickerAttribute(value: string | null): unknown {\n if (value === null || value === '') {\n return value ?? undefined\n }\n try {\n return JSON.parse(value) as unknown\n }\n catch {\n return value\n }\n}\n\nfunction clonePickerValue(value: unknown): unknown {\n return Array.isArray(value) ? value.map(item => clonePickerValue(item)) : value\n}\n\nexport class WeappPicker extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('picker')!.attributes]\n\n #rangeValue: unknown = []\n #rangePropertySet = false\n #valueValue: unknown\n #valuePropertySet = false\n #committedValue: unknown\n #draftValue: unknown\n #initialValue: unknown\n #initialValueCaptured = false\n #backdrop?: HTMLDivElement\n #panel?: HTMLDivElement\n #editors?: HTMLDivElement\n #title?: HTMLDivElement\n #open = false\n\n get range() {\n return this.#rangePropertySet\n ? this.#rangeValue\n : parsePickerAttribute(this.getAttribute('range')) ?? []\n }\n\n set range(value: unknown) {\n this.#rangePropertySet = true\n this.#rangeValue = value\n this.#syncExternalValue()\n }\n\n get value() {\n return this.#valuePropertySet\n ? this.#valueValue\n : parsePickerAttribute(this.getAttribute('value'))\n }\n\n set value(value: unknown) {\n this.#valuePropertySet = true\n this.#valueValue = value\n this.#syncExternalValue()\n }\n\n get disabled() {\n return readBooleanAttribute(this, 'disabled')\n }\n\n get formControlName() {\n return this.getAttribute('name') ?? ''\n }\n\n get formControlValue() {\n return clonePickerValue(this.#committedValue)\n }\n\n get formControlDisabled() {\n return this.disabled\n }\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n this.#ensureStructure()\n this.#syncExternalValue()\n if (!this.#initialValueCaptured) {\n this.#initialValue = clonePickerValue(this.#committedValue)\n this.#initialValueCaptured = true\n }\n this.addEventListener('click', this.#handleHostClick)\n this.addEventListener('keydown', this.#handleHostKeydown)\n if (!this.hasAttribute('tabindex')) {\n this.tabIndex = 0\n }\n connectFormControl(this)\n }\n\n disconnectedCallback() {\n this.removeEventListener('click', this.#handleHostClick)\n this.removeEventListener('keydown', this.#handleHostKeydown)\n disconnectFormControl(this)\n }\n\n attributeChangedCallback() {\n this.#syncExternalValue()\n }\n\n formActivate() {\n this.open()\n }\n\n formReset() {\n this.#committedValue = clonePickerValue(this.#initialValue)\n this.#close(false)\n }\n\n open() {\n if (this.disabled || this.#open || !this.#backdrop) {\n return\n }\n this.#draftValue = clonePickerValue(this.#committedValue)\n this.#renderEditors()\n this.#backdrop.hidden = false\n this.#open = true\n }\n\n #ensureStructure() {\n if (this.#backdrop || typeof document === 'undefined') {\n return\n }\n const root = this.shadowRoot ?? this.attachShadow({ mode: 'open' })\n const style = document.createElement('style')\n style.textContent = PICKER_SHADOW_STYLE\n const slot = document.createElement('slot')\n const backdrop = document.createElement('div')\n backdrop.className = 'backdrop'\n backdrop.hidden = true\n const panel = document.createElement('div')\n panel.className = 'panel'\n panel.setAttribute('role', 'dialog')\n panel.setAttribute('aria-modal', 'true')\n const toolbar = document.createElement('div')\n toolbar.className = 'toolbar'\n const cancel = document.createElement('button')\n cancel.type = 'button'\n cancel.textContent = '取消'\n const title = document.createElement('div')\n title.className = 'title'\n const confirm = document.createElement('button')\n confirm.type = 'button'\n confirm.textContent = '确定'\n const editors = document.createElement('div')\n editors.className = 'editors'\n toolbar.append(cancel, title, confirm)\n panel.append(toolbar, editors)\n backdrop.append(panel)\n root.append(style, slot, backdrop)\n cancel.addEventListener('click', () => this.#close(true))\n confirm.addEventListener('click', () => this.#confirm())\n backdrop.addEventListener('click', (event) => {\n if (event.target === backdrop) {\n event.stopPropagation()\n this.#close(true)\n }\n })\n this.#backdrop = backdrop\n this.#panel = panel\n this.#editors = editors\n this.#title = title\n }\n\n #syncExternalValue() {\n const mode = resolvePickerMode(this.getAttribute('mode'))\n const external = this.value\n if (mode === 'selector') {\n const columns = resolvePickerColumns(this.range, mode, this.getAttribute('range-key') ?? undefined)\n this.#committedValue = normalizePickerIndex(external, columns[0]!.length)\n }\n else if (mode === 'multiSelector') {\n const columns = resolvePickerColumns(this.range, mode, this.getAttribute('range-key') ?? undefined)\n this.#committedValue = normalizePickerIndexes(external, columns.map(column => column.length))\n }\n else if (mode === 'date') {\n this.#committedValue = typeof external === 'string' && external\n ? external\n : currentDateValue(this.getAttribute('fields') ?? undefined)\n }\n else if (mode === 'time') {\n this.#committedValue = typeof external === 'string' ? external : ''\n }\n else {\n this.#committedValue = Array.isArray(external) ? external.map(item => String(item ?? '')) : []\n }\n if (this.#open) {\n this.#draftValue = clonePickerValue(this.#committedValue)\n this.#renderEditors()\n }\n }\n\n #renderEditors() {\n if (!this.#editors || typeof document === 'undefined') {\n return\n }\n const mode = resolvePickerMode(this.getAttribute('mode'))\n this.#title!.textContent = this.getAttribute('header-text') ?? ''\n const controls = renderPickerEditors({\n mode,\n range: this.range,\n rangeKey: this.getAttribute('range-key') ?? undefined,\n value: this.#draftValue,\n fields: this.getAttribute('fields') ?? undefined,\n start: this.getAttribute('start') ?? undefined,\n end: this.getAttribute('end') ?? undefined,\n customItem: this.getAttribute('custom-item') ?? undefined,\n level: this.getAttribute('level') ?? undefined,\n onValueChange: (value) => {\n this.#draftValue = value\n },\n onColumnChange: (column, value) => {\n dispatchMiniProgramEvent(this, 'columnchange', { column, value })\n },\n })\n this.#editors.replaceChildren(...controls)\n }\n\n #confirm() {\n const mode = resolvePickerMode(this.getAttribute('mode'))\n this.#committedValue = clonePickerValue(this.#draftValue)\n this.#close(false)\n dispatchMiniProgramEvent(this, 'change', createPickerChangeDetail(mode, clonePickerValue(this.#committedValue)))\n }\n\n #close(cancelled: boolean) {\n if (!this.#open || !this.#backdrop) {\n return\n }\n this.#backdrop.hidden = true\n this.#open = false\n if (cancelled) {\n dispatchMiniProgramEvent(this, 'cancel', {})\n }\n }\n\n #handleHostClick = (event: MouseEvent) => {\n if (this.#panel && event.composedPath().includes(this.#panel)) {\n return\n }\n this.open()\n }\n\n #handleHostKeydown = (event: KeyboardEvent) => {\n if (event.key !== 'Enter' && event.key !== ' ') {\n return\n }\n event.preventDefault()\n this.open()\n }\n}\n\nexport * from './helpers'\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column.mjs","names":[
|
|
1
|
+
{"version":3,"file":"column.mjs","names":[],"sources":["../../../../src/runtime/nativeComponents/pickerView/column.ts"],"sourcesContent":["import { getNativeComponentDescriptor } from '../../../shared/nativeComponents'\nimport { resolveContainingShadowRoot } from '../helpers'\nimport { ensureNativeComponentStyle } from '../style'\nimport {\n PICKER_VIEW_COLUMN_CHANGE_EVENT,\n PICKER_VIEW_COLUMN_READY_EVENT,\n PICKER_VIEW_PICK_END_EVENT,\n PICKER_VIEW_PICK_START_EVENT,\n} from './helpers'\nimport { PICKER_VIEW_COLUMN_SHADOW_STYLE } from './style'\n\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nexport class WeappPickerViewColumn extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('picker-view-column')!.attributes]\n\n #scroller?: HTMLDivElement\n #slot?: HTMLSlotElement\n #itemHeight = 34\n #selectedIndex = 0\n #scrollTimer?: ReturnType<typeof globalThis.setTimeout>\n #resizeObserver?: ResizeObserver\n #picking = false\n #suppressScroll = false\n\n get itemCount() {\n return this.#items.length\n }\n\n get itemHeight() {\n return this.#itemHeight\n }\n\n get selectedIndex() {\n if (!this.#scroller) {\n return this.#selectedIndex\n }\n return this.#clampIndex(Math.round(this.#scroller.scrollTop / this.#itemHeight))\n }\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n this.#ensureStructure()\n this.#syncMetrics()\n this.#observeSize()\n }\n\n disconnectedCallback() {\n if (this.#scrollTimer) {\n clearTimeout(this.#scrollTimer)\n this.#scrollTimer = undefined\n }\n this.#resizeObserver?.disconnect()\n this.#resizeObserver = undefined\n }\n\n setSelectedIndex(value: number) {\n this.#selectedIndex = this.#clampIndex(value)\n if (!this.#scroller) {\n return\n }\n this.#suppressScroll = true\n this.#scroller.scrollTop = this.#selectedIndex * this.#itemHeight\n requestAnimationFrame(() => {\n this.#suppressScroll = false\n })\n }\n\n get #items() {\n return this.#slot?.assignedElements({ flatten: true }) ?? []\n }\n\n #ensureStructure() {\n if (this.#scroller || typeof document === 'undefined') {\n return\n }\n const root = this.shadowRoot ?? this.attachShadow({ mode: 'open' })\n const style = document.createElement('style')\n style.textContent = PICKER_VIEW_COLUMN_SHADOW_STYLE\n const scroller = document.createElement('div')\n scroller.className = 'scroller'\n const leading = document.createElement('div')\n leading.className = 'spacer'\n const slot = document.createElement('slot')\n const trailing = document.createElement('div')\n trailing.className = 'spacer'\n scroller.append(leading, slot, trailing)\n root.append(style, scroller)\n slot.addEventListener('slotchange', () => this.#syncMetrics())\n scroller.addEventListener('pointerdown', this.#handlePickStart)\n scroller.addEventListener('pointerup', this.#schedulePickEnd)\n scroller.addEventListener('pointercancel', this.#schedulePickEnd)\n scroller.addEventListener('scroll', this.#handleScroll, { passive: true })\n this.#scroller = scroller\n this.#slot = slot\n }\n\n #syncMetrics() {\n const first = this.#items[0] as HTMLElement | undefined\n const height = first?.getBoundingClientRect().height\n this.#itemHeight = height && Number.isFinite(height) && height > 0 ? height : 34\n this.style.setProperty('--weapp-picker-view-item-height', `${this.#itemHeight}px`)\n this.setSelectedIndex(this.#selectedIndex)\n this.#dispatchInternal(PICKER_VIEW_COLUMN_READY_EVENT)\n }\n\n #observeSize() {\n if (typeof ResizeObserver === 'undefined' || !this.#scroller || this.#resizeObserver) {\n return\n }\n this.#resizeObserver = new ResizeObserver(() => this.#syncMetrics())\n this.#resizeObserver.observe(this.#scroller)\n }\n\n #clampIndex(value: number) {\n const index = Number.isFinite(value) ? Math.trunc(value) : 0\n return Math.min(Math.max(0, index), Math.max(0, this.itemCount - 1))\n }\n\n #dispatchInternal(name: string, detail: unknown = {}) {\n this.dispatchEvent(new CustomEvent(name, {\n bubbles: true,\n composed: true,\n detail,\n }))\n }\n\n #handlePickStart = () => {\n if (this.#picking || this.#suppressScroll) {\n return\n }\n this.#picking = true\n this.#dispatchInternal(PICKER_VIEW_PICK_START_EVENT)\n }\n\n #handleScroll = () => {\n if (this.#suppressScroll) {\n return\n }\n this.#handlePickStart()\n this.#selectedIndex = this.selectedIndex\n this.#dispatchInternal(PICKER_VIEW_COLUMN_CHANGE_EVENT, {\n value: this.#selectedIndex,\n phase: 'changing',\n })\n this.#schedulePickEnd()\n }\n\n #schedulePickEnd = () => {\n if (this.#scrollTimer) {\n clearTimeout(this.#scrollTimer)\n }\n this.#scrollTimer = globalThis.setTimeout(() => {\n this.#scrollTimer = undefined\n this.#selectedIndex = this.selectedIndex\n this.setSelectedIndex(this.#selectedIndex)\n this.#dispatchInternal(PICKER_VIEW_COLUMN_CHANGE_EVENT, {\n value: this.#selectedIndex,\n phase: 'end',\n })\n if (this.#picking) {\n this.#picking = false\n this.#dispatchInternal(PICKER_VIEW_PICK_END_EVENT)\n }\n }, 100)\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/runtime/nativeComponents/pickerView/index.ts"],"sourcesContent":["import type { PickerViewColumnChangeDetail } from './helpers'\nimport { getNativeComponentDescriptor } from '../../../shared/nativeComponents'\nimport { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from '../helpers'\nimport { ensureNativeComponentStyle } from '../style'\nimport { WeappPickerViewColumn } from './column'\nimport {\n normalizePickerViewValue,\n PICKER_VIEW_COLUMN_CHANGE_EVENT,\n PICKER_VIEW_COLUMN_READY_EVENT,\n PICKER_VIEW_PICK_END_EVENT,\n PICKER_VIEW_PICK_START_EVENT,\n} from './helpers'\nimport { PICKER_VIEW_SHADOW_STYLE } from './style'\n\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nfunction parsePickerViewValue(value: string | null) {\n if (!value) {\n return []\n }\n try {\n const parsed = JSON.parse(value) as unknown\n return Array.isArray(parsed) ? parsed : []\n }\n catch {\n return []\n }\n}\n\nexport class WeappPickerView extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('picker-view')!.attributes]\n\n #value: unknown = []\n #valuePropertySet = false\n #columns: WeappPickerViewColumn[] = []\n #slot?: HTMLSlotElement\n #indicator?: HTMLDivElement\n #masks: HTMLDivElement[] = []\n #lastEmittedValue: number[] = []\n\n get value() {\n return this.#valuePropertySet ? this.#value : parsePickerViewValue(this.getAttribute('value'))\n }\n\n set value(value: unknown) {\n this.#valuePropertySet = true\n this.#value = value\n this.#syncColumns()\n }\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n this.#ensureStructure()\n this.addEventListener(PICKER_VIEW_COLUMN_CHANGE_EVENT, this.#handleColumnChange as EventListener)\n this.addEventListener(PICKER_VIEW_COLUMN_READY_EVENT, this.#handleColumnReady)\n this.addEventListener(PICKER_VIEW_PICK_START_EVENT, this.#handlePickStart)\n this.addEventListener(PICKER_VIEW_PICK_END_EVENT, this.#handlePickEnd)\n this.#syncColumns()\n this.#syncStyles()\n }\n\n disconnectedCallback() {\n this.removeEventListener(PICKER_VIEW_COLUMN_CHANGE_EVENT, this.#handleColumnChange as EventListener)\n this.removeEventListener(PICKER_VIEW_COLUMN_READY_EVENT, this.#handleColumnReady)\n this.removeEventListener(PICKER_VIEW_PICK_START_EVENT, this.#handlePickStart)\n this.removeEventListener(PICKER_VIEW_PICK_END_EVENT, this.#handlePickEnd)\n }\n\n attributeChangedCallback(name: string) {\n if (name === 'value') {\n this.#syncColumns()\n }\n else {\n this.#syncStyles()\n }\n }\n\n #ensureStructure() {\n if (this.#slot || typeof document === 'undefined') {\n return\n }\n const root = this.shadowRoot ?? this.attachShadow({ mode: 'open' })\n const style = document.createElement('style')\n style.textContent = PICKER_VIEW_SHADOW_STYLE\n const viewport = document.createElement('div')\n viewport.className = 'viewport'\n const slot = document.createElement('slot')\n const topMask = document.createElement('div')\n topMask.className = 'mask mask--top'\n const bottomMask = document.createElement('div')\n bottomMask.className = 'mask mask--bottom'\n const indicator = document.createElement('div')\n indicator.className = 'indicator'\n viewport.append(slot, topMask, bottomMask, indicator)\n root.append(style, viewport)\n slot.addEventListener('slotchange', () => this.#syncColumns())\n this.#slot = slot\n this.#indicator = indicator\n this.#masks = [topMask, bottomMask]\n }\n\n #syncColumns() {\n if (!this.#slot) {\n return\n }\n this.#columns = this.#slot.assignedElements({ flatten: true })\n .filter((element): element is WeappPickerViewColumn => element.tagName.toLowerCase() === 'weapp-picker-view-column')\n const next = normalizePickerViewValue(this.value, this.#columns.map(column => column.itemCount))\n this.#columns.forEach((column, index) => column.setSelectedIndex(next[index]!))\n const itemHeight = this.#columns[0]?.itemHeight\n if (itemHeight) {\n this.style.setProperty('--weapp-picker-view-item-height', `${itemHeight}px`)\n }\n this.#lastEmittedValue = [...next]\n }\n\n #syncStyles() {\n if (!this.#indicator) {\n return\n }\n this.#indicator.style.cssText = this.getAttribute('indicator-style') ?? ''\n this.#indicator.className = `indicator ${this.getAttribute('indicator-class') ?? ''}`.trim()\n const maskStyle = this.getAttribute('mask-style') ?? ''\n const maskClass = this.getAttribute('mask-class') ?? ''\n this.#masks.forEach((mask, index) => {\n mask.style.cssText = maskStyle\n mask.className = `mask mask--${index === 0 ? 'top' : 'bottom'} ${maskClass}`.trim()\n })\n }\n\n #handleColumnChange = (event: CustomEvent<PickerViewColumnChangeDetail>) => {\n event.stopPropagation()\n const column = event.target as WeappPickerViewColumn\n const columnIndex = this.#columns.indexOf(column)\n if (columnIndex < 0) {\n return\n }\n const next = normalizePickerViewValue(\n this.#columns.map(item => item.selectedIndex),\n this.#columns.map(item => item.itemCount),\n )\n next[columnIndex] = event.detail.value\n const immediate = readBooleanAttribute(this, 'immediate-change')\n if ((immediate && event.detail.phase === 'changing') || (!immediate && event.detail.phase === 'end')) {\n this.#emitChange(next)\n }\n }\n\n #handleColumnReady = (event: Event) => {\n event.stopPropagation()\n this.#syncColumns()\n }\n\n #emitChange(value: number[]) {\n if (value.length === this.#lastEmittedValue.length && value.every((item, index) => item === this.#lastEmittedValue[index])) {\n return\n }\n this.#lastEmittedValue = [...value]\n dispatchMiniProgramEvent(this, 'change', { value })\n }\n\n #handlePickStart = (event: Event) => {\n event.stopPropagation()\n dispatchMiniProgramEvent(this, 'pickstart', {})\n }\n\n #handlePickEnd = (event: Event) => {\n event.stopPropagation()\n dispatchMiniProgramEvent(this, 'pickend', {})\n }\n}\n\nexport { WeappPickerViewColumn }\nexport * from './helpers'\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/runtime/nativeComponents/progress/index.ts"],"sourcesContent":["import { getNativeComponentDescriptor } from '../../../shared/nativeComponents'\nimport { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from '../helpers'\nimport { ensureNativeComponentStyle } from '../style'\nimport {\n createProgressActiveEndDetail,\n resolveProgressAnimationDuration,\n resolveProgressConfig,\n} from './helpers'\nimport { PROGRESS_SHADOW_STYLE } from './style'\n\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nexport class WeappProgress extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('progress')!.attributes]\n\n #value?: HTMLDivElement\n #info?: HTMLSpanElement\n #renderedPercent = 0\n #animationKey = ''\n #animationToken = 0\n #animationFrame?: number\n #animationTimer?: ReturnType<typeof globalThis.setTimeout>\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n this.#ensureStructure()\n this.#syncAttributes()\n }\n\n disconnectedCallback() {\n this.#cancelAnimation()\n }\n\n attributeChangedCallback() {\n this.#syncAttributes()\n }\n\n #ensureStructure() {\n if (this.#value || typeof document === 'undefined') {\n return\n }\n const root = this.shadowRoot ?? this.attachShadow({ mode: 'open' })\n const style = document.createElement('style')\n style.textContent = PROGRESS_SHADOW_STYLE\n const track = document.createElement('div')\n track.className = 'track'\n const value = document.createElement('div')\n value.className = 'value'\n const info = document.createElement('span')\n info.className = 'info'\n track.append(value)\n root.append(style, track, info)\n this.#value = value\n this.#info = info\n }\n\n #syncAttributes() {\n if (!this.#value || !this.#info) {\n return\n }\n const config = resolveProgressConfig({\n percent: this.getAttribute('percent'),\n strokeWidth: this.getAttribute('stroke-width'),\n duration: this.getAttribute('duration'),\n borderRadius: this.getAttribute('border-radius'),\n fontSize: this.getAttribute('font-size'),\n activeMode: this.getAttribute('active-mode'),\n })\n this.style.setProperty('--weapp-progress-stroke-width', `${config.strokeWidth}px`)\n this.style.setProperty('--weapp-progress-border-radius', `${config.borderRadius}px`)\n this.style.setProperty('--weapp-progress-font-size', `${config.fontSize}px`)\n this.style.setProperty('--weapp-progress-active-color', this.getAttribute('active-color') ?? this.getAttribute('color') ?? '#09bb07')\n this.style.setProperty('--weapp-progress-background-color', this.getAttribute('background-color') ?? '#ebebeb')\n this.#info.hidden = !readBooleanAttribute(this, 'show-info')\n\n if (!readBooleanAttribute(this, 'active')) {\n this.#animationKey = ''\n this.#cancelAnimation()\n this.#setProgress(config.percent, 0)\n this.#setInfo(config.percent)\n this.#renderedPercent = config.percent\n return\n }\n\n const animationKey = `${config.percent}:${config.duration}:${config.activeMode}`\n if (animationKey === this.#animationKey) {\n return\n }\n this.#animationKey = animationKey\n const start = config.activeMode === 'backwards' ? 0 : this.#renderedPercent\n this.#renderedPercent = config.percent\n this.#animate(\n start,\n config.percent,\n resolveProgressAnimationDuration(start, config.percent, config.duration),\n )\n }\n\n #setProgress(percent: number, duration: number) {\n this.style.setProperty('--weapp-progress-percent', `${percent}%`)\n this.style.setProperty('--weapp-progress-duration', `${duration}ms`)\n }\n\n #setInfo(percent: number) {\n this.#info!.textContent = `${Math.round(percent)}%`\n }\n\n #animate(start: number, end: number, duration: number) {\n this.#cancelAnimation()\n const token = ++this.#animationToken\n this.#setProgress(start, 0)\n this.#setInfo(start)\n void this.#value!.offsetWidth\n requestAnimationFrame((startTime) => {\n if (token !== this.#animationToken || !this.isConnected) {\n return\n }\n this.#setProgress(end, duration)\n if (duration === 0 || start === end) {\n queueMicrotask(() => this.#completeAnimation(token))\n return\n }\n this.#animateInfo(token, start, end, duration, startTime)\n this.#animationTimer = globalThis.setTimeout(\n () => this.#completeAnimation(token),\n duration + 50,\n )\n })\n }\n\n #animateInfo(token: number, start: number, end: number, duration: number, startTime: number) {\n const update = (time: number) => {\n if (token !== this.#animationToken || !this.isConnected) {\n return\n }\n const progress = Math.min(1, Math.max(0, (time - startTime) / duration))\n this.#setInfo(start + (end - start) * progress)\n if (progress < 1) {\n this.#animationFrame = requestAnimationFrame(update)\n }\n }\n this.#animationFrame = requestAnimationFrame(update)\n }\n\n #completeAnimation(token: number) {\n if (token !== this.#animationToken) {\n return\n }\n this.#cancelAnimation(false)\n this.#setInfo(this.#renderedPercent)\n dispatchMiniProgramEvent(this, 'activeend', createProgressActiveEndDetail())\n }\n\n #cancelAnimation(invalidate = true) {\n if (this.#animationFrame !== undefined) {\n cancelAnimationFrame(this.#animationFrame)\n this.#animationFrame = undefined\n }\n if (this.#animationTimer !== undefined) {\n globalThis.clearTimeout(this.#animationTimer)\n this.#animationTimer = undefined\n }\n if (invalidate) {\n this.#animationToken += 1\n }\n }\n}\n\nexport * from './helpers'\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radio.mjs","names":[
|
|
1
|
+
{"version":3,"file":"radio.mjs","names":[],"sources":["../../../src/runtime/nativeComponents/radio.ts"],"sourcesContent":["import { getNativeComponentDescriptor } from '../../shared/nativeComponents'\nimport { connectFormControl, disconnectFormControl, findClosestComposedElement } from './formControl'\nimport { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from './helpers'\nimport { ensureNativeComponentStyle } from './style'\n\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nexport function collectRadioGroupValue(radios: ArrayLike<WeappRadio>) {\n return Array.from(radios).find(radio => radio.checked && !radio.disabled)?.value ?? ''\n}\n\nexport class WeappRadioGroup extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('radio-group')!.attributes]\n\n get formControlName() {\n return this.getAttribute('name') ?? ''\n }\n\n get formControlValue() {\n return collectRadioGroupValue(this.querySelectorAll<WeappRadio>('weapp-radio'))\n }\n\n get formControlDisabled() {\n return false\n }\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n connectFormControl(this)\n this.#normalizeCheckedRadios()\n }\n\n disconnectedCallback() {\n disconnectFormControl(this)\n }\n\n formReset() {\n for (const radio of this.querySelectorAll<WeappRadio>('weapp-radio')) {\n radio.formReset()\n }\n this.#normalizeCheckedRadios()\n }\n\n notifyRadioChange(source: WeappRadio) {\n for (const radio of this.querySelectorAll<WeappRadio>('weapp-radio')) {\n if (radio !== source) {\n radio.setCheckedFromGroup(false)\n }\n }\n dispatchMiniProgramEvent(this, 'change', { value: source.value })\n }\n\n #normalizeCheckedRadios() {\n let selected = false\n for (const radio of this.querySelectorAll<WeappRadio>('weapp-radio')) {\n if (!radio.checked) {\n continue\n }\n if (selected) {\n radio.setCheckedFromGroup(false)\n }\n selected = true\n }\n }\n}\n\nexport class WeappRadio extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('radio')!.attributes]\n\n #input?: HTMLInputElement\n #initialChecked = false\n #initialCheckedCaptured = false\n\n get value() {\n return this.getAttribute('value') ?? ''\n }\n\n set value(value: string) {\n this.setAttribute('value', value ?? '')\n }\n\n get checked() {\n return this.#input?.checked ?? readBooleanAttribute(this, 'checked')\n }\n\n set checked(value: boolean) {\n this.toggleAttribute('checked', Boolean(value))\n }\n\n get disabled() {\n return readBooleanAttribute(this, 'disabled')\n }\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n if (!this.#initialCheckedCaptured) {\n this.#initialChecked = readBooleanAttribute(this, 'checked')\n this.#initialCheckedCaptured = true\n }\n this.#ensureStructure()\n this.#syncAttributes()\n }\n\n attributeChangedCallback() {\n this.#syncAttributes()\n }\n\n formReset() {\n this.setCheckedFromGroup(this.#initialChecked)\n }\n\n formActivate() {\n if (!this.disabled) {\n this.#input?.click()\n }\n }\n\n setCheckedFromGroup(checked: boolean) {\n if (this.#input) {\n this.#input.checked = checked\n }\n }\n\n #ensureStructure() {\n if (this.#input || typeof document === 'undefined') {\n return\n }\n const root = this.shadowRoot ?? this.attachShadow({ mode: 'open' })\n const style = document.createElement('style')\n style.textContent = `\n :host { --weapp-control-color: #07c160; }\n label { display: inline-flex; align-items: center; cursor: pointer; }\n input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }\n .control {\n position: relative;\n box-sizing: border-box;\n width: 23px;\n height: 23px;\n flex: 0 0 23px;\n border: 1px solid #d1d1d1;\n border-radius: 50%;\n background: #ffffff;\n }\n input:checked + .control { border-color: var(--weapp-control-color); background: var(--weapp-control-color); }\n input:checked + .control::after {\n position: absolute;\n top: 6px;\n left: 6px;\n width: 9px;\n height: 9px;\n border-radius: 50%;\n background: #ffffff;\n content: '';\n }\n input:disabled + .control { border-color: #d8d8d8; background: #eeeeee; opacity: 0.7; }\n .content { margin-left: 8px; }\n `\n const label = document.createElement('label')\n const input = document.createElement('input')\n input.type = 'radio'\n const control = document.createElement('span')\n control.className = 'control'\n const content = document.createElement('span')\n content.className = 'content'\n content.append(document.createElement('slot'))\n input.addEventListener('change', (event) => {\n event.stopPropagation()\n const group = findClosestComposedElement(this, 'weapp-radio-group') as WeappRadioGroup | null\n group?.notifyRadioChange(this)\n })\n label.append(input, control, content)\n root.append(style, label)\n this.#input = input\n }\n\n #syncAttributes() {\n if (!this.#input) {\n return\n }\n this.#input.checked = readBooleanAttribute(this, 'checked')\n this.#input.disabled = this.disabled\n this.#input.value = this.value\n this.style.setProperty('--weapp-control-color', this.getAttribute('color') || '#07c160')\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/runtime/nativeComponents/richText/index.ts"],"sourcesContent":["import type { SafeRichTextNode } from './helpers'\nimport { getNativeComponentDescriptor } from '../../../shared/nativeComponents'\nimport { readBooleanAttribute, resolveContainingShadowRoot } from '../helpers'\nimport { ensureNativeComponentStyle } from '../style'\nimport { normalizeRichTextNodes } from './helpers'\n\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nfunction createRichTextDomNode(node: SafeRichTextNode): globalThis.Node {\n if (node.type === 'text') {\n return document.createTextNode(node.text)\n }\n const element = document.createElement(node.name)\n for (const [name, value] of Object.entries(node.attrs)) {\n element.setAttribute(name, value)\n }\n element.append(...node.children.map(createRichTextDomNode))\n return element\n}\n\nexport class WeappRichText extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('rich-text')!.attributes]\n\n #content?: HTMLDivElement\n #nodes: unknown = ''\n\n get nodes() {\n return this.#nodes\n }\n\n set nodes(value: unknown) {\n if (Object.is(this.#nodes, value)) {\n return\n }\n this.#nodes = value\n this.#renderNodes()\n }\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n this.#ensureStructure()\n if (this.#nodes === '') {\n this.#nodes = this.getAttribute('nodes') ?? ''\n }\n this.#syncAttributes()\n this.#renderNodes()\n }\n\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null) {\n if (name === 'nodes') {\n this.#nodes = newValue ?? ''\n this.#renderNodes()\n return\n }\n this.#syncAttributes()\n }\n\n #ensureStructure() {\n if (this.#content || typeof document === 'undefined') {\n return\n }\n const root = this.shadowRoot ?? this.attachShadow({ mode: 'open' })\n const style = document.createElement('style')\n style.textContent = `\n :host { overflow-wrap: break-word; }\n .content { display: block; min-width: 0; }\n img { max-width: 100%; }\n `\n const content = document.createElement('div')\n content.className = 'content'\n content.addEventListener('click', (event) => {\n const target = event.target\n if (target instanceof Element && target.closest('a')) {\n event.preventDefault()\n }\n })\n root.append(style, content)\n this.#content = content\n }\n\n #syncAttributes() {\n if (!this.#content) {\n return\n }\n const space = this.getAttribute('space')\n this.#content.style.whiteSpace = space === 'nbsp' || space === 'ensp' || space === 'emsp'\n ? 'pre-wrap'\n : 'normal'\n this.#content.style.userSelect = readBooleanAttribute(this, 'user-select') ? 'text' : ''\n }\n\n #renderNodes() {\n if (!this.#content || typeof document === 'undefined') {\n return\n }\n this.#content.replaceChildren(...normalizeRichTextNodes(this.#nodes).map(createRichTextDomNode))\n }\n}\n\nexport * from './helpers'\n"],"mappings":";;;;;;AAMA,MAAM,cAAe,WAAW,eAAe,MAAM,CAAC;AAEtD,SAAS,sBAAsB,MAAyC;CACtE,IAAI,KAAK,SAAS,QAChB,OAAO,SAAS,eAAe,KAAK,IAAI;CAE1C,MAAM,UAAU,SAAS,cAAc,KAAK,IAAI;CAChD,KAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,KAAK,KAAK,GACnD,QAAQ,aAAa,MAAM,KAAK;CAElC,QAAQ,OAAO,GAAG,KAAK,SAAS,IAAI,qBAAqB,CAAC;CAC1D,OAAO;AACT;AAEA,IAAa,gBAAb,cAAmC,YAAY;CAC7C,OAAO,qBAAqB,CAAC,GAAG,6BAA6B,WAAW,CAAC,CAAE,UAAU;CAErF;CACA,SAAkB;CAElB,IAAI,QAAQ;EACV,OAAO,KAAK;CACd;CAEA,IAAI,MAAM,OAAgB;EACxB,IAAI,OAAO,GAAG,KAAK,QAAQ,KAAK,GAC9B;EAEF,KAAK,SAAS;EACd,KAAK,aAAa;CACpB;CAEA,oBAAoB;EAClB,2BAA2B,4BAA4B,IAAI,CAAC;EAC5D,KAAK,iBAAiB;EACtB,IAAI,KAAK,WAAW,IAClB,KAAK,SAAS,KAAK,aAAa,OAAO,KAAK;EAE9C,KAAK,gBAAgB;EACrB,KAAK,aAAa;CACpB;CAEA,yBAAyB,MAAc,WAA0B,UAAyB;EACxF,IAAI,SAAS,SAAS;GACpB,KAAK,SAAS,YAAY;GAC1B,KAAK,aAAa;GAClB;EACF;EACA,KAAK,gBAAgB;CACvB;CAEA,mBAAmB;EACjB,IAAI,KAAK,YAAY,OAAO,aAAa,aACvC;EAEF,MAAM,OAAO,KAAK,cAAc,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;EAClE,MAAM,QAAQ,SAAS,cAAc,OAAO;EAC5C,MAAM,cAAc;;;;;EAKpB,MAAM,UAAU,SAAS,cAAc,KAAK;EAC5C,QAAQ,YAAY;EACpB,QAAQ,iBAAiB,UAAU,UAAU;GAC3C,MAAM,SAAS,MAAM;GACrB,IAAI,kBAAkB,WAAW,OAAO,QAAQ,GAAG,GACjD,MAAM,eAAe;EAEzB,CAAC;EACD,KAAK,OAAO,OAAO,OAAO;EAC1B,KAAK,WAAW;CAClB;CAEA,kBAAkB;EAChB,IAAI,CAAC,KAAK,UACR;EAEF,MAAM,QAAQ,KAAK,aAAa,OAAO;EACvC,KAAK,SAAS,MAAM,aAAa,UAAU,UAAU,UAAU,UAAU,UAAU,SAC/E,aACA;EACJ,KAAK,SAAS,MAAM,aAAa,qBAAqB,MAAM,aAAa,IAAI,SAAS;CACxF;CAEA,eAAe;EACb,IAAI,CAAC,KAAK,YAAY,OAAO,aAAa,aACxC;EAEF,KAAK,SAAS,gBAAgB,GAAG,uBAAuB,KAAK,MAAM,CAAC,CAAC,IAAI,qBAAqB,CAAC;CACjG;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrollView.mjs","names":[
|
|
1
|
+
{"version":3,"file":"scrollView.mjs","names":[],"sources":["../../../src/runtime/nativeComponents/scrollView.ts"],"sourcesContent":["import { getNativeComponentDescriptor } from '../../shared/nativeComponents'\nimport { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from './helpers'\nimport { ensureNativeComponentStyle } from './style'\n\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nexport function createScrollEventDetail(\n viewport: Pick<HTMLDivElement, 'scrollHeight' | 'scrollLeft' | 'scrollTop' | 'scrollWidth'>,\n previous: { scrollLeft: number, scrollTop: number },\n) {\n return {\n scrollLeft: viewport.scrollLeft,\n scrollTop: viewport.scrollTop,\n scrollWidth: viewport.scrollWidth,\n scrollHeight: viewport.scrollHeight,\n deltaX: viewport.scrollLeft - previous.scrollLeft,\n deltaY: viewport.scrollTop - previous.scrollTop,\n }\n}\n\nexport class WeappScrollView extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('scroll-view')!.attributes]\n\n #viewport?: HTMLDivElement\n #lastScrollLeft = 0\n #lastScrollTop = 0\n\n get scrollTop() {\n return this.#viewport?.scrollTop ?? 0\n }\n\n set scrollTop(value: number) {\n if (this.#viewport) {\n this.#viewport.scrollTop = value\n }\n }\n\n get scrollLeft() {\n return this.#viewport?.scrollLeft ?? 0\n }\n\n set scrollLeft(value: number) {\n if (this.#viewport) {\n this.#viewport.scrollLeft = value\n }\n }\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n this.#ensureStructure()\n this.#syncAttributes()\n }\n\n attributeChangedCallback() {\n this.#syncAttributes()\n }\n\n #ensureStructure() {\n if (this.#viewport || typeof document === 'undefined') {\n return\n }\n const root = this.shadowRoot ?? this.attachShadow({ mode: 'open' })\n const style = document.createElement('style')\n style.textContent = `\n :host { min-width: 0; min-height: 0; }\n .viewport { width: 100%; height: 100%; overscroll-behavior: contain; }\n `\n const viewport = document.createElement('div')\n viewport.className = 'viewport'\n const slot = document.createElement('slot')\n viewport.append(slot)\n viewport.addEventListener('scroll', () => {\n const detail = createScrollEventDetail(viewport, {\n scrollLeft: this.#lastScrollLeft,\n scrollTop: this.#lastScrollTop,\n })\n this.#lastScrollLeft = viewport.scrollLeft\n this.#lastScrollTop = viewport.scrollTop\n dispatchMiniProgramEvent(this, 'scroll', detail)\n })\n root.append(style, viewport)\n this.#viewport = viewport\n }\n\n #syncAttributes() {\n if (!this.#viewport) {\n return\n }\n this.#viewport.style.overflowX = readBooleanAttribute(this, 'scroll-x') ? 'auto' : 'hidden'\n this.#viewport.style.overflowY = readBooleanAttribute(this, 'scroll-y') ? 'auto' : 'hidden'\n const scrollTop = Number(this.getAttribute('scroll-top'))\n const scrollLeft = Number(this.getAttribute('scroll-left'))\n if (Number.isFinite(scrollTop)) {\n this.#viewport.scrollTop = scrollTop\n }\n if (Number.isFinite(scrollLeft)) {\n this.#viewport.scrollLeft = scrollLeft\n }\n }\n}\n"],"mappings":";;;;;AAIA,MAAM,cAAe,WAAW,eAAe,MAAM,CAAC;AAEtD,SAAgB,wBACd,UACA,UACA;CACA,OAAO;EACL,YAAY,SAAS;EACrB,WAAW,SAAS;EACpB,aAAa,SAAS;EACtB,cAAc,SAAS;EACvB,QAAQ,SAAS,aAAa,SAAS;EACvC,QAAQ,SAAS,YAAY,SAAS;CACxC;AACF;AAEA,IAAa,kBAAb,cAAqC,YAAY;CAC/C,OAAO,qBAAqB,CAAC,GAAG,6BAA6B,aAAa,CAAC,CAAE,UAAU;CAEvF;CACA,kBAAkB;CAClB,iBAAiB;CAEjB,IAAI,YAAY;EACd,OAAO,KAAK,WAAW,aAAa;CACtC;CAEA,IAAI,UAAU,OAAe;EAC3B,IAAI,KAAK,WACP,KAAK,UAAU,YAAY;CAE/B;CAEA,IAAI,aAAa;EACf,OAAO,KAAK,WAAW,cAAc;CACvC;CAEA,IAAI,WAAW,OAAe;EAC5B,IAAI,KAAK,WACP,KAAK,UAAU,aAAa;CAEhC;CAEA,oBAAoB;EAClB,2BAA2B,4BAA4B,IAAI,CAAC;EAC5D,KAAK,iBAAiB;EACtB,KAAK,gBAAgB;CACvB;CAEA,2BAA2B;EACzB,KAAK,gBAAgB;CACvB;CAEA,mBAAmB;EACjB,IAAI,KAAK,aAAa,OAAO,aAAa,aACxC;EAEF,MAAM,OAAO,KAAK,cAAc,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;EAClE,MAAM,QAAQ,SAAS,cAAc,OAAO;EAC5C,MAAM,cAAc;;;;EAIpB,MAAM,WAAW,SAAS,cAAc,KAAK;EAC7C,SAAS,YAAY;EACrB,MAAM,OAAO,SAAS,cAAc,MAAM;EAC1C,SAAS,OAAO,IAAI;EACpB,SAAS,iBAAiB,gBAAgB;GACxC,MAAM,SAAS,wBAAwB,UAAU;IAC/C,YAAY,KAAK;IACjB,WAAW,KAAK;GAClB,CAAC;GACD,KAAK,kBAAkB,SAAS;GAChC,KAAK,iBAAiB,SAAS;GAC/B,yBAAyB,MAAM,UAAU,MAAM;EACjD,CAAC;EACD,KAAK,OAAO,OAAO,QAAQ;EAC3B,KAAK,YAAY;CACnB;CAEA,kBAAkB;EAChB,IAAI,CAAC,KAAK,WACR;EAEF,KAAK,UAAU,MAAM,YAAY,qBAAqB,MAAM,UAAU,IAAI,SAAS;EACnF,KAAK,UAAU,MAAM,YAAY,qBAAqB,MAAM,UAAU,IAAI,SAAS;EACnF,MAAM,YAAY,OAAO,KAAK,aAAa,YAAY,CAAC;EACxD,MAAM,aAAa,OAAO,KAAK,aAAa,aAAa,CAAC;EAC1D,IAAI,OAAO,SAAS,SAAS,GAC3B,KAAK,UAAU,YAAY;EAE7B,IAAI,OAAO,SAAS,UAAU,GAC5B,KAAK,UAAU,aAAa;CAEhC;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/runtime/nativeComponents/slider/index.ts"],"sourcesContent":["import { getNativeComponentDescriptor } from '../../../shared/nativeComponents'\nimport { connectFormControl, disconnectFormControl } from '../formControl'\nimport { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from '../helpers'\nimport { ensureNativeComponentStyle } from '../style'\nimport { createSliderEventDetail, resolveSliderConfig } from './helpers'\nimport { SLIDER_SHADOW_STYLE } from './style'\n\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nexport class WeappSlider extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('slider')!.attributes]\n\n #input?: HTMLInputElement\n #output?: HTMLOutputElement\n #initialValue = 0\n #initialValueCaptured = false\n\n get value() {\n return this.#input?.valueAsNumber ?? this.#config.value\n }\n\n set value(value: number) {\n this.setAttribute('value', String(value))\n }\n\n get disabled() {\n return readBooleanAttribute(this, 'disabled')\n }\n\n get formControlName() {\n return this.getAttribute('name') ?? ''\n }\n\n get formControlValue() {\n return this.value\n }\n\n get formControlDisabled() {\n return this.disabled\n }\n\n get #config() {\n return resolveSliderConfig({\n min: this.getAttribute('min'),\n max: this.getAttribute('max'),\n step: this.getAttribute('step'),\n value: this.getAttribute('value'),\n blockSize: this.getAttribute('block-size'),\n })\n }\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n this.#ensureStructure()\n this.#syncAttributes()\n if (!this.#initialValueCaptured) {\n this.#initialValue = this.#config.value\n this.#initialValueCaptured = true\n }\n connectFormControl(this)\n }\n\n disconnectedCallback() {\n disconnectFormControl(this)\n }\n\n attributeChangedCallback() {\n this.#syncAttributes()\n }\n\n formReset() {\n if (!this.#input) {\n return\n }\n this.#input.valueAsNumber = this.#initialValue\n this.#syncVisual()\n }\n\n formActivate() {\n this.#input?.focus()\n }\n\n #ensureStructure() {\n if (this.#input || typeof document === 'undefined') {\n return\n }\n const root = this.shadowRoot ?? this.attachShadow({ mode: 'open' })\n const style = document.createElement('style')\n style.textContent = SLIDER_SHADOW_STYLE\n const wrapper = document.createElement('div')\n wrapper.className = 'slider'\n const input = document.createElement('input')\n input.type = 'range'\n const output = document.createElement('output')\n input.addEventListener('input', (event) => {\n event.stopPropagation()\n this.#syncVisual()\n dispatchMiniProgramEvent(this, 'changing', createSliderEventDetail(input.valueAsNumber))\n })\n input.addEventListener('change', (event) => {\n event.stopPropagation()\n this.#syncVisual()\n dispatchMiniProgramEvent(this, 'change', createSliderEventDetail(input.valueAsNumber))\n })\n wrapper.append(input, output)\n root.append(style, wrapper)\n this.#input = input\n this.#output = output\n }\n\n #syncAttributes() {\n if (!this.#input || !this.#output) {\n return\n }\n const config = this.#config\n this.#input.min = String(config.min)\n this.#input.max = String(config.max)\n this.#input.step = String(config.step)\n this.#input.valueAsNumber = config.value\n this.#input.disabled = this.disabled\n this.#output.hidden = !readBooleanAttribute(this, 'show-value')\n this.style.setProperty('--weapp-slider-active-color', this.getAttribute('active-color') ?? this.getAttribute('selected-color') ?? '#1aad19')\n this.style.setProperty('--weapp-slider-background-color', this.getAttribute('background-color') ?? this.getAttribute('color') ?? '#e9e9e9')\n this.style.setProperty('--weapp-slider-block-color', this.getAttribute('block-color') ?? '#ffffff')\n this.style.setProperty('--weapp-slider-block-size', `${config.blockSize}px`)\n this.#syncVisual()\n }\n\n #syncVisual() {\n const min = Number(this.#input!.min)\n const max = Number(this.#input!.max)\n const value = this.#input!.valueAsNumber\n const progress = ((value - min) / (max - min)) * 100\n this.style.setProperty('--weapp-slider-progress', `${progress}%`)\n this.#output!.value = String(value)\n this.#output!.textContent = String(value)\n }\n}\n\nexport * from './helpers'\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["#ensureStructure","#syncItems","#syncAttributes","#observeSize","#restartAutoplay","#initialized","#clearTimers","#resizeObserver","#viewport","#handlePointerDown","#handlePointerMove","#handlePointerEnd","#track","#slot","#indicators","#items","#current","#renderIndicators","#setCurrent","#syncVisual","#itemSize","#syncIndicatorState","#scheduleAnimationFinish","#animationTimer","#autoplayTimer","#pointer","#clearAnimationTimer"],"sources":["../../../../src/runtime/nativeComponents/swiper/index.ts"],"sourcesContent":["import type { SwiperChangeSource } from './helpers'\nimport type { WeappSwiperItem } from './item'\nimport { getNativeComponentDescriptor } from '../../../shared/nativeComponents'\nimport { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from '../helpers'\nimport { ensureNativeComponentStyle } from '../style'\nimport {\n createSwiperChangeDetail,\n resolveSwiperEasing,\n resolveSwiperIndex,\n resolveSwiperLength,\n resolveSwiperNumber,\n resolveSwiperStep,\n resolveSwipeTarget,\n} from './helpers'\nimport { SWIPER_SHADOW_STYLE } from './style'\n\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nexport class WeappSwiper extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('swiper')!.attributes]\n\n #viewport?: HTMLDivElement\n #track?: HTMLDivElement\n #slot?: HTMLSlotElement\n #indicators?: HTMLDivElement\n #items: WeappSwiperItem[] = []\n #current = 0\n #itemSize = 0\n #initialized = false\n #autoplayTimer?: ReturnType<typeof globalThis.setTimeout>\n #animationTimer?: ReturnType<typeof globalThis.setTimeout>\n #resizeObserver?: ResizeObserver\n #pointer?: { id: number, start: number, delta: number }\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n this.#ensureStructure()\n this.#syncItems()\n this.#syncAttributes(false)\n this.#observeSize()\n this.#restartAutoplay()\n this.#initialized = true\n }\n\n disconnectedCallback() {\n this.#clearTimers()\n this.#resizeObserver?.disconnect()\n this.#resizeObserver = undefined\n this.#initialized = false\n }\n\n attributeChangedCallback(name: string) {\n if (!this.isConnected || !this.#initialized) {\n return\n }\n this.#syncAttributes(name === 'current' || name === 'current-item-id', name)\n this.#restartAutoplay()\n }\n\n #ensureStructure() {\n if (this.#viewport || typeof document === 'undefined') {\n return\n }\n const root = this.shadowRoot ?? this.attachShadow({ mode: 'open' })\n const style = document.createElement('style')\n style.textContent = SWIPER_SHADOW_STYLE\n const viewport = document.createElement('div')\n viewport.className = 'viewport'\n const track = document.createElement('div')\n track.className = 'track'\n const slot = document.createElement('slot')\n track.append(slot)\n viewport.append(track)\n const indicators = document.createElement('div')\n indicators.className = 'indicators'\n root.append(style, viewport, indicators)\n slot.addEventListener('slotchange', () => {\n this.#syncItems()\n this.#syncAttributes(false, 'current-item-id')\n this.#restartAutoplay()\n })\n viewport.addEventListener('pointerdown', this.#handlePointerDown)\n viewport.addEventListener('pointermove', this.#handlePointerMove)\n viewport.addEventListener('pointerup', this.#handlePointerEnd)\n viewport.addEventListener('pointercancel', this.#handlePointerEnd)\n this.#viewport = viewport\n this.#track = track\n this.#slot = slot\n this.#indicators = indicators\n }\n\n #syncItems() {\n if (!this.#slot) {\n return\n }\n this.#items = this.#slot.assignedElements({ flatten: true })\n .filter((element): element is WeappSwiperItem => element.tagName.toLowerCase() === 'weapp-swiper-item')\n if (this.#current >= this.#items.length) {\n this.#current = Math.max(0, this.#items.length - 1)\n }\n this.#renderIndicators()\n }\n\n #syncAttributes(emitChange: boolean, changedName?: string) {\n if (!this.#track || !this.#viewport) {\n return\n }\n const vertical = readBooleanAttribute(this, 'vertical')\n this.toggleAttribute('data-vertical', vertical)\n const displayCount = Math.max(1, Math.trunc(resolveSwiperNumber(this.getAttribute('display-multiple-items'), 1, 1)))\n const previousMargin = resolveSwiperLength(this.getAttribute('previous-margin'))\n const nextMargin = resolveSwiperLength(this.getAttribute('next-margin'))\n this.style.setProperty('--weapp-swiper-display-count', String(displayCount))\n this.style.setProperty('--weapp-swiper-indicator-color', this.getAttribute('indicator-color') ?? 'rgba(0, 0, 0, 0.3)')\n this.style.setProperty('--weapp-swiper-indicator-active-color', this.getAttribute('indicator-active-color') ?? '#000000')\n this.#track.style.marginLeft = vertical ? '0' : previousMargin\n this.#track.style.marginTop = vertical ? previousMargin : '0'\n this.#track.style.width = vertical ? '100%' : `calc(100% - ${previousMargin} - ${nextMargin})`\n this.#track.style.height = vertical ? `calc(100% - ${previousMargin} - ${nextMargin})` : '100%'\n this.#track.style.transitionTimingFunction = resolveSwiperEasing(this.getAttribute('easing-function'))\n this.#indicators?.toggleAttribute('hidden', !readBooleanAttribute(this, 'indicator-dots'))\n\n if (!this.#initialized || changedName === 'current' || changedName === 'current-item-id') {\n const itemIds = this.#items.map(item => item.getAttribute('item-id') ?? '')\n const next = resolveSwiperIndex({\n current: resolveSwiperNumber(this.getAttribute('current'), 0),\n currentItemId: this.getAttribute('current-item-id') ?? undefined,\n itemIds,\n })\n if (emitChange && next !== this.#current) {\n this.#setCurrent(next, '')\n return\n }\n this.#current = next\n }\n this.#syncVisual(false)\n }\n\n #syncVisual(animate: boolean, dragOffset = 0) {\n const track = this.#track!\n const vertical = readBooleanAttribute(this, 'vertical')\n const displayCount = Math.max(1, Math.trunc(resolveSwiperNumber(this.getAttribute('display-multiple-items'), 1, 1)))\n const trackRect = track.getBoundingClientRect()\n this.#itemSize = (vertical ? trackRect.height : trackRect.width) / displayCount\n const offset = -(this.#current * this.#itemSize) + dragOffset\n const duration = animate ? resolveSwiperNumber(this.getAttribute('duration'), 500) : 0\n track.style.transitionDuration = `${duration}ms`\n track.style.transform = vertical\n ? `translate3d(0, ${offset}px, 0)`\n : `translate3d(${offset}px, 0, 0)`\n this.#items.forEach((item, index) => {\n const active = index >= this.#current && index < this.#current + displayCount\n item.toggleAttribute('data-active', active)\n item.setAttribute('aria-hidden', String(!active))\n })\n this.#syncIndicatorState()\n }\n\n #setCurrent(next: number, source: SwiperChangeSource) {\n if (next === this.#current || !this.#items.length) {\n this.#syncVisual(true)\n return\n }\n this.#current = next\n this.#syncVisual(true)\n const detail = createSwiperChangeDetail(\n this.#current,\n this.#items[this.#current]!.getAttribute('item-id') ?? '',\n source,\n )\n dispatchMiniProgramEvent(this, 'change', detail)\n this.#scheduleAnimationFinish(detail)\n }\n\n #scheduleAnimationFinish(detail: ReturnType<typeof createSwiperChangeDetail>) {\n if (this.#animationTimer) {\n clearTimeout(this.#animationTimer)\n }\n const duration = resolveSwiperNumber(this.getAttribute('duration'), 500)\n this.#animationTimer = globalThis.setTimeout(() => {\n this.#animationTimer = undefined\n dispatchMiniProgramEvent(this, 'animationfinish', detail)\n }, duration)\n }\n\n #renderIndicators() {\n const indicators = this.#indicators!\n indicators.replaceChildren(...this.#items.map(() => {\n const indicator = document.createElement('span')\n indicator.className = 'indicator'\n return indicator\n }))\n this.#syncIndicatorState()\n }\n\n #syncIndicatorState() {\n ;[...this.#indicators!.children].forEach((indicator, index) => {\n indicator.setAttribute('data-active', String(index === this.#current))\n })\n }\n\n #restartAutoplay() {\n if (this.#autoplayTimer) {\n clearTimeout(this.#autoplayTimer)\n this.#autoplayTimer = undefined\n }\n if (!this.isConnected || !readBooleanAttribute(this, 'autoplay') || this.#items.length < 2) {\n return\n }\n const interval = resolveSwiperNumber(this.getAttribute('interval'), 5000, 16)\n this.#autoplayTimer = globalThis.setTimeout(() => {\n this.#autoplayTimer = undefined\n const next = resolveSwiperStep(this.#current, 1, this.#items.length, true)\n this.#setCurrent(next, 'autoplay')\n this.#restartAutoplay()\n }, interval)\n }\n\n #observeSize() {\n if (typeof ResizeObserver === 'undefined' || !this.#viewport || this.#resizeObserver) {\n return\n }\n this.#resizeObserver = new ResizeObserver(() => this.#syncVisual(false))\n this.#resizeObserver.observe(this.#viewport)\n }\n\n #handlePointerDown = (event: PointerEvent) => {\n if (readBooleanAttribute(this, 'disable-touch') || this.#items.length < 2 || event.button !== 0) {\n return\n }\n const vertical = readBooleanAttribute(this, 'vertical')\n this.#pointer = {\n id: event.pointerId,\n start: vertical ? event.clientY : event.clientX,\n delta: 0,\n }\n this.#viewport?.setPointerCapture?.(event.pointerId)\n this.#clearAnimationTimer()\n this.#syncVisual(false)\n }\n\n #handlePointerMove = (event: PointerEvent) => {\n if (!this.#pointer || event.pointerId !== this.#pointer.id) {\n return\n }\n const vertical = readBooleanAttribute(this, 'vertical')\n const position = vertical ? event.clientY : event.clientX\n let delta = position - this.#pointer.start\n if (!readBooleanAttribute(this, 'circular')) {\n const atStart = this.#current === 0 && delta > 0\n const atEnd = this.#current === this.#items.length - 1 && delta < 0\n if (atStart || atEnd) {\n delta *= 0.35\n }\n }\n this.#pointer.delta = delta\n this.#syncVisual(false, delta)\n dispatchMiniProgramEvent(this, 'transition', {\n dx: vertical ? 0 : delta,\n dy: vertical ? delta : 0,\n })\n }\n\n #handlePointerEnd = (event: PointerEvent) => {\n if (!this.#pointer || event.pointerId !== this.#pointer.id) {\n return\n }\n const delta = this.#pointer.delta\n this.#pointer = undefined\n this.#viewport?.releasePointerCapture?.(event.pointerId)\n const next = resolveSwipeTarget({\n current: this.#current,\n delta,\n itemSize: this.#itemSize,\n itemCount: this.#items.length,\n circular: readBooleanAttribute(this, 'circular'),\n })\n this.#setCurrent(next, 'touch')\n this.#restartAutoplay()\n }\n\n #clearAnimationTimer() {\n clearTimeout(this.#animationTimer)\n this.#animationTimer = undefined\n }\n\n #clearTimers() {\n if (this.#autoplayTimer) {\n clearTimeout(this.#autoplayTimer)\n this.#autoplayTimer = undefined\n }\n this.#clearAnimationTimer()\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/runtime/nativeComponents/swiper/index.ts"],"sourcesContent":["import type { SwiperChangeSource } from './helpers'\nimport type { WeappSwiperItem } from './item'\nimport { getNativeComponentDescriptor } from '../../../shared/nativeComponents'\nimport { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from '../helpers'\nimport { ensureNativeComponentStyle } from '../style'\nimport {\n createSwiperChangeDetail,\n resolveSwiperEasing,\n resolveSwiperIndex,\n resolveSwiperLength,\n resolveSwiperNumber,\n resolveSwiperStep,\n resolveSwipeTarget,\n} from './helpers'\nimport { SWIPER_SHADOW_STYLE } from './style'\n\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nexport class WeappSwiper extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('swiper')!.attributes]\n\n #viewport?: HTMLDivElement\n #track?: HTMLDivElement\n #slot?: HTMLSlotElement\n #indicators?: HTMLDivElement\n #items: WeappSwiperItem[] = []\n #current = 0\n #itemSize = 0\n #initialized = false\n #autoplayTimer?: ReturnType<typeof globalThis.setTimeout>\n #animationTimer?: ReturnType<typeof globalThis.setTimeout>\n #resizeObserver?: ResizeObserver\n #pointer?: { id: number, start: number, delta: number }\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n this.#ensureStructure()\n this.#syncItems()\n this.#syncAttributes(false)\n this.#observeSize()\n this.#restartAutoplay()\n this.#initialized = true\n }\n\n disconnectedCallback() {\n this.#clearTimers()\n this.#resizeObserver?.disconnect()\n this.#resizeObserver = undefined\n this.#initialized = false\n }\n\n attributeChangedCallback(name: string) {\n if (!this.isConnected || !this.#initialized) {\n return\n }\n this.#syncAttributes(name === 'current' || name === 'current-item-id', name)\n this.#restartAutoplay()\n }\n\n #ensureStructure() {\n if (this.#viewport || typeof document === 'undefined') {\n return\n }\n const root = this.shadowRoot ?? this.attachShadow({ mode: 'open' })\n const style = document.createElement('style')\n style.textContent = SWIPER_SHADOW_STYLE\n const viewport = document.createElement('div')\n viewport.className = 'viewport'\n const track = document.createElement('div')\n track.className = 'track'\n const slot = document.createElement('slot')\n track.append(slot)\n viewport.append(track)\n const indicators = document.createElement('div')\n indicators.className = 'indicators'\n root.append(style, viewport, indicators)\n slot.addEventListener('slotchange', () => {\n this.#syncItems()\n this.#syncAttributes(false, 'current-item-id')\n this.#restartAutoplay()\n })\n viewport.addEventListener('pointerdown', this.#handlePointerDown)\n viewport.addEventListener('pointermove', this.#handlePointerMove)\n viewport.addEventListener('pointerup', this.#handlePointerEnd)\n viewport.addEventListener('pointercancel', this.#handlePointerEnd)\n this.#viewport = viewport\n this.#track = track\n this.#slot = slot\n this.#indicators = indicators\n }\n\n #syncItems() {\n if (!this.#slot) {\n return\n }\n this.#items = this.#slot.assignedElements({ flatten: true })\n .filter((element): element is WeappSwiperItem => element.tagName.toLowerCase() === 'weapp-swiper-item')\n if (this.#current >= this.#items.length) {\n this.#current = Math.max(0, this.#items.length - 1)\n }\n this.#renderIndicators()\n }\n\n #syncAttributes(emitChange: boolean, changedName?: string) {\n if (!this.#track || !this.#viewport) {\n return\n }\n const vertical = readBooleanAttribute(this, 'vertical')\n this.toggleAttribute('data-vertical', vertical)\n const displayCount = Math.max(1, Math.trunc(resolveSwiperNumber(this.getAttribute('display-multiple-items'), 1, 1)))\n const previousMargin = resolveSwiperLength(this.getAttribute('previous-margin'))\n const nextMargin = resolveSwiperLength(this.getAttribute('next-margin'))\n this.style.setProperty('--weapp-swiper-display-count', String(displayCount))\n this.style.setProperty('--weapp-swiper-indicator-color', this.getAttribute('indicator-color') ?? 'rgba(0, 0, 0, 0.3)')\n this.style.setProperty('--weapp-swiper-indicator-active-color', this.getAttribute('indicator-active-color') ?? '#000000')\n this.#track.style.marginLeft = vertical ? '0' : previousMargin\n this.#track.style.marginTop = vertical ? previousMargin : '0'\n this.#track.style.width = vertical ? '100%' : `calc(100% - ${previousMargin} - ${nextMargin})`\n this.#track.style.height = vertical ? `calc(100% - ${previousMargin} - ${nextMargin})` : '100%'\n this.#track.style.transitionTimingFunction = resolveSwiperEasing(this.getAttribute('easing-function'))\n this.#indicators?.toggleAttribute('hidden', !readBooleanAttribute(this, 'indicator-dots'))\n\n if (!this.#initialized || changedName === 'current' || changedName === 'current-item-id') {\n const itemIds = this.#items.map(item => item.getAttribute('item-id') ?? '')\n const next = resolveSwiperIndex({\n current: resolveSwiperNumber(this.getAttribute('current'), 0),\n currentItemId: this.getAttribute('current-item-id') ?? undefined,\n itemIds,\n })\n if (emitChange && next !== this.#current) {\n this.#setCurrent(next, '')\n return\n }\n this.#current = next\n }\n this.#syncVisual(false)\n }\n\n #syncVisual(animate: boolean, dragOffset = 0) {\n const track = this.#track!\n const vertical = readBooleanAttribute(this, 'vertical')\n const displayCount = Math.max(1, Math.trunc(resolveSwiperNumber(this.getAttribute('display-multiple-items'), 1, 1)))\n const trackRect = track.getBoundingClientRect()\n this.#itemSize = (vertical ? trackRect.height : trackRect.width) / displayCount\n const offset = -(this.#current * this.#itemSize) + dragOffset\n const duration = animate ? resolveSwiperNumber(this.getAttribute('duration'), 500) : 0\n track.style.transitionDuration = `${duration}ms`\n track.style.transform = vertical\n ? `translate3d(0, ${offset}px, 0)`\n : `translate3d(${offset}px, 0, 0)`\n this.#items.forEach((item, index) => {\n const active = index >= this.#current && index < this.#current + displayCount\n item.toggleAttribute('data-active', active)\n item.setAttribute('aria-hidden', String(!active))\n })\n this.#syncIndicatorState()\n }\n\n #setCurrent(next: number, source: SwiperChangeSource) {\n if (next === this.#current || !this.#items.length) {\n this.#syncVisual(true)\n return\n }\n this.#current = next\n this.#syncVisual(true)\n const detail = createSwiperChangeDetail(\n this.#current,\n this.#items[this.#current]!.getAttribute('item-id') ?? '',\n source,\n )\n dispatchMiniProgramEvent(this, 'change', detail)\n this.#scheduleAnimationFinish(detail)\n }\n\n #scheduleAnimationFinish(detail: ReturnType<typeof createSwiperChangeDetail>) {\n if (this.#animationTimer) {\n clearTimeout(this.#animationTimer)\n }\n const duration = resolveSwiperNumber(this.getAttribute('duration'), 500)\n this.#animationTimer = globalThis.setTimeout(() => {\n this.#animationTimer = undefined\n dispatchMiniProgramEvent(this, 'animationfinish', detail)\n }, duration)\n }\n\n #renderIndicators() {\n const indicators = this.#indicators!\n indicators.replaceChildren(...this.#items.map(() => {\n const indicator = document.createElement('span')\n indicator.className = 'indicator'\n return indicator\n }))\n this.#syncIndicatorState()\n }\n\n #syncIndicatorState() {\n ;[...this.#indicators!.children].forEach((indicator, index) => {\n indicator.setAttribute('data-active', String(index === this.#current))\n })\n }\n\n #restartAutoplay() {\n if (this.#autoplayTimer) {\n clearTimeout(this.#autoplayTimer)\n this.#autoplayTimer = undefined\n }\n if (!this.isConnected || !readBooleanAttribute(this, 'autoplay') || this.#items.length < 2) {\n return\n }\n const interval = resolveSwiperNumber(this.getAttribute('interval'), 5000, 16)\n this.#autoplayTimer = globalThis.setTimeout(() => {\n this.#autoplayTimer = undefined\n const next = resolveSwiperStep(this.#current, 1, this.#items.length, true)\n this.#setCurrent(next, 'autoplay')\n this.#restartAutoplay()\n }, interval)\n }\n\n #observeSize() {\n if (typeof ResizeObserver === 'undefined' || !this.#viewport || this.#resizeObserver) {\n return\n }\n this.#resizeObserver = new ResizeObserver(() => this.#syncVisual(false))\n this.#resizeObserver.observe(this.#viewport)\n }\n\n #handlePointerDown = (event: PointerEvent) => {\n if (readBooleanAttribute(this, 'disable-touch') || this.#items.length < 2 || event.button !== 0) {\n return\n }\n const vertical = readBooleanAttribute(this, 'vertical')\n this.#pointer = {\n id: event.pointerId,\n start: vertical ? event.clientY : event.clientX,\n delta: 0,\n }\n this.#viewport?.setPointerCapture?.(event.pointerId)\n this.#clearAnimationTimer()\n this.#syncVisual(false)\n }\n\n #handlePointerMove = (event: PointerEvent) => {\n if (!this.#pointer || event.pointerId !== this.#pointer.id) {\n return\n }\n const vertical = readBooleanAttribute(this, 'vertical')\n const position = vertical ? event.clientY : event.clientX\n let delta = position - this.#pointer.start\n if (!readBooleanAttribute(this, 'circular')) {\n const atStart = this.#current === 0 && delta > 0\n const atEnd = this.#current === this.#items.length - 1 && delta < 0\n if (atStart || atEnd) {\n delta *= 0.35\n }\n }\n this.#pointer.delta = delta\n this.#syncVisual(false, delta)\n dispatchMiniProgramEvent(this, 'transition', {\n dx: vertical ? 0 : delta,\n dy: vertical ? delta : 0,\n })\n }\n\n #handlePointerEnd = (event: PointerEvent) => {\n if (!this.#pointer || event.pointerId !== this.#pointer.id) {\n return\n }\n const delta = this.#pointer.delta\n this.#pointer = undefined\n this.#viewport?.releasePointerCapture?.(event.pointerId)\n const next = resolveSwipeTarget({\n current: this.#current,\n delta,\n itemSize: this.#itemSize,\n itemCount: this.#items.length,\n circular: readBooleanAttribute(this, 'circular'),\n })\n this.#setCurrent(next, 'touch')\n this.#restartAutoplay()\n }\n\n #clearAnimationTimer() {\n clearTimeout(this.#animationTimer)\n this.#animationTimer = undefined\n }\n\n #clearTimers() {\n if (this.#autoplayTimer) {\n clearTimeout(this.#autoplayTimer)\n this.#autoplayTimer = undefined\n }\n this.#clearAnimationTimer()\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch.mjs","names":[
|
|
1
|
+
{"version":3,"file":"switch.mjs","names":[],"sources":["../../../src/runtime/nativeComponents/switch.ts"],"sourcesContent":["import { getNativeComponentDescriptor } from '../../shared/nativeComponents'\nimport { connectFormControl, disconnectFormControl } from './formControl'\nimport { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from './helpers'\nimport { ensureNativeComponentStyle } from './style'\n\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nexport function createSwitchEventDetail(checked: boolean) {\n return { value: checked }\n}\n\nexport class WeappSwitch extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('switch')!.attributes]\n\n #input?: HTMLInputElement\n #initialChecked = false\n #initialCheckedCaptured = false\n\n get checked() {\n return this.#input?.checked ?? readBooleanAttribute(this, 'checked')\n }\n\n set checked(value: boolean) {\n this.toggleAttribute('checked', Boolean(value))\n }\n\n get disabled() {\n return readBooleanAttribute(this, 'disabled')\n }\n\n get formControlName() {\n return this.getAttribute('name') ?? ''\n }\n\n get formControlValue() {\n return this.checked\n }\n\n get formControlDisabled() {\n return this.disabled\n }\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n if (!this.#initialCheckedCaptured) {\n this.#initialChecked = readBooleanAttribute(this, 'checked')\n this.#initialCheckedCaptured = true\n }\n this.#ensureStructure()\n this.#syncAttributes()\n connectFormControl(this)\n }\n\n disconnectedCallback() {\n disconnectFormControl(this)\n }\n\n attributeChangedCallback() {\n this.#syncAttributes()\n }\n\n formReset() {\n if (this.#input) {\n this.#input.checked = this.#initialChecked\n }\n }\n\n formActivate() {\n if (!this.disabled) {\n this.#input?.click()\n }\n }\n\n #ensureStructure() {\n if (this.#input || typeof document === 'undefined') {\n return\n }\n const root = this.shadowRoot ?? this.attachShadow({ mode: 'open' })\n const style = document.createElement('style')\n style.textContent = `\n :host { padding: 0 5px; --weapp-control-color: #07c160; }\n label { display: inline-flex; align-items: center; cursor: pointer; }\n input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }\n .control {\n position: relative;\n box-sizing: border-box;\n width: 52px;\n height: 32px;\n border: 1px solid #dfdfdf;\n border-radius: 16px;\n background: #dfdfdf;\n transition: background 0.2s, border-color 0.2s;\n }\n .control::after {\n position: absolute;\n top: 1px;\n left: 1px;\n width: 28px;\n height: 28px;\n border-radius: 50%;\n background: #ffffff;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.35);\n content: '';\n transition: transform 0.2s;\n }\n input:checked + .control { border-color: var(--weapp-control-color); background: var(--weapp-control-color); }\n input:checked + .control::after { transform: translateX(20px); }\n input:disabled + .control { opacity: 0.5; cursor: not-allowed; }\n :host([type='checkbox']) .control {\n width: 23px;\n height: 23px;\n border-radius: 3px;\n background: #ffffff;\n }\n :host([type='checkbox']) .control::after { display: none; }\n :host([type='checkbox']) input:checked + .control { background: var(--weapp-control-color); }\n :host([type='checkbox']) input:checked + .control::before {\n position: absolute;\n top: 3px;\n left: 7px;\n width: 6px;\n height: 11px;\n border: solid #ffffff;\n border-width: 0 2px 2px 0;\n content: '';\n transform: rotate(45deg);\n }\n `\n const label = document.createElement('label')\n const input = document.createElement('input')\n input.type = 'checkbox'\n input.addEventListener('change', (event) => {\n event.stopPropagation()\n dispatchMiniProgramEvent(this, 'change', createSwitchEventDetail(input.checked))\n })\n const control = document.createElement('span')\n control.className = 'control'\n label.append(input, control)\n root.append(style, label)\n this.#input = input\n }\n\n #syncAttributes() {\n if (!this.#input) {\n return\n }\n this.#input.checked = readBooleanAttribute(this, 'checked')\n this.#input.disabled = this.disabled\n this.style.setProperty('--weapp-control-color', this.getAttribute('color') || '#07c160')\n }\n}\n"],"mappings":";;;;;;AAKA,MAAM,cAAe,WAAW,eAAe,MAAM,CAAC;AAEtD,SAAgB,wBAAwB,SAAkB;CACxD,OAAO,EAAE,OAAO,QAAQ;AAC1B;AAEA,IAAa,cAAb,cAAiC,YAAY;CAC3C,OAAO,qBAAqB,CAAC,GAAG,6BAA6B,QAAQ,CAAC,CAAE,UAAU;CAElF;CACA,kBAAkB;CAClB,0BAA0B;CAE1B,IAAI,UAAU;EACZ,OAAO,KAAK,QAAQ,WAAW,qBAAqB,MAAM,SAAS;CACrE;CAEA,IAAI,QAAQ,OAAgB;EAC1B,KAAK,gBAAgB,WAAW,QAAQ,KAAK,CAAC;CAChD;CAEA,IAAI,WAAW;EACb,OAAO,qBAAqB,MAAM,UAAU;CAC9C;CAEA,IAAI,kBAAkB;EACpB,OAAO,KAAK,aAAa,MAAM,KAAK;CACtC;CAEA,IAAI,mBAAmB;EACrB,OAAO,KAAK;CACd;CAEA,IAAI,sBAAsB;EACxB,OAAO,KAAK;CACd;CAEA,oBAAoB;EAClB,2BAA2B,4BAA4B,IAAI,CAAC;EAC5D,IAAI,CAAC,KAAK,yBAAyB;GACjC,KAAK,kBAAkB,qBAAqB,MAAM,SAAS;GAC3D,KAAK,0BAA0B;EACjC;EACA,KAAK,iBAAiB;EACtB,KAAK,gBAAgB;EACrB,mBAAmB,IAAI;CACzB;CAEA,uBAAuB;EACrB,sBAAsB,IAAI;CAC5B;CAEA,2BAA2B;EACzB,KAAK,gBAAgB;CACvB;CAEA,YAAY;EACV,IAAI,KAAK,QACP,KAAK,OAAO,UAAU,KAAK;CAE/B;CAEA,eAAe;EACb,IAAI,CAAC,KAAK,UACR,KAAK,QAAQ,MAAM;CAEvB;CAEA,mBAAmB;EACjB,IAAI,KAAK,UAAU,OAAO,aAAa,aACrC;EAEF,MAAM,OAAO,KAAK,cAAc,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;EAClE,MAAM,QAAQ,SAAS,cAAc,OAAO;EAC5C,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiDpB,MAAM,QAAQ,SAAS,cAAc,OAAO;EAC5C,MAAM,QAAQ,SAAS,cAAc,OAAO;EAC5C,MAAM,OAAO;EACb,MAAM,iBAAiB,WAAW,UAAU;GAC1C,MAAM,gBAAgB;GACtB,yBAAyB,MAAM,UAAU,wBAAwB,MAAM,OAAO,CAAC;EACjF,CAAC;EACD,MAAM,UAAU,SAAS,cAAc,MAAM;EAC7C,QAAQ,YAAY;EACpB,MAAM,OAAO,OAAO,OAAO;EAC3B,KAAK,OAAO,OAAO,KAAK;EACxB,KAAK,SAAS;CAChB;CAEA,kBAAkB;EAChB,IAAI,CAAC,KAAK,QACR;EAEF,KAAK,OAAO,UAAU,qBAAqB,MAAM,SAAS;EAC1D,KAAK,OAAO,WAAW,KAAK;EAC5B,KAAK,MAAM,YAAY,yBAAyB,KAAK,aAAa,OAAO,KAAK,SAAS;CACzF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textarea.mjs","names":[
|
|
1
|
+
{"version":3,"file":"textarea.mjs","names":[],"sources":["../../../src/runtime/nativeComponents/textarea.ts"],"sourcesContent":["import { getNativeComponentDescriptor } from '../../shared/nativeComponents'\nimport { connectFormControl, disconnectFormControl } from './formControl'\nimport { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot, resolveMaxLength } from './helpers'\nimport { createInputEventDetail } from './input'\nimport { ensureNativeComponentStyle } from './style'\n\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nexport function createTextareaLineChangeDetail(textarea: Pick<HTMLTextAreaElement, 'scrollHeight' | 'value'>) {\n const height = textarea.scrollHeight\n return {\n height,\n heightRpx: height * 2,\n lineCount: textarea.value.split('\\n').length,\n }\n}\n\nexport class WeappTextarea extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('textarea')!.attributes]\n\n #textarea?: HTMLTextAreaElement\n #initialValue = ''\n #initialValueCaptured = false\n #lastLineCount = 1\n #lastHeight = 0\n\n get value() {\n return this.#textarea?.value ?? this.getAttribute('value') ?? ''\n }\n\n set value(value: string) {\n this.setAttribute('value', value ?? '')\n }\n\n get formControlName() {\n return this.getAttribute('name') ?? ''\n }\n\n get formControlValue() {\n return this.value\n }\n\n get formControlDisabled() {\n return readBooleanAttribute(this, 'disabled')\n }\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n if (!this.#initialValueCaptured) {\n this.#initialValue = this.getAttribute('value') ?? ''\n this.#initialValueCaptured = true\n }\n this.#ensureStructure()\n this.#syncAttributes()\n connectFormControl(this)\n this.#syncFocus()\n }\n\n disconnectedCallback() {\n disconnectFormControl(this)\n }\n\n attributeChangedCallback(name: string) {\n this.#syncAttributes()\n if (name === 'focus' || name === 'auto-focus') {\n this.#syncFocus()\n }\n }\n\n focus(options?: FocusOptions) {\n this.#textarea?.focus(options)\n }\n\n blur() {\n this.#textarea?.blur()\n }\n\n formReset() {\n if (!this.#textarea) {\n return\n }\n this.#textarea.value = this.#initialValue\n this.#updateLineMetrics(false)\n }\n\n formActivate() {\n this.focus()\n }\n\n #ensureStructure() {\n if (this.#textarea || typeof document === 'undefined') {\n return\n }\n const root = this.shadowRoot ?? this.attachShadow({ mode: 'open' })\n const style = document.createElement('style')\n style.textContent = `\n :host { cursor: text; }\n textarea {\n display: block;\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n height: 100%;\n min-height: inherit;\n padding: 0;\n border: 0;\n outline: 0;\n resize: none;\n color: inherit;\n background: transparent;\n font: inherit;\n line-height: inherit;\n }\n `\n const textarea = document.createElement('textarea')\n textarea.addEventListener('input', (event) => {\n event.stopPropagation()\n dispatchMiniProgramEvent(this, 'input', createInputEventDetail(textarea))\n this.#updateLineMetrics(true)\n })\n textarea.addEventListener('focus', () => {\n dispatchMiniProgramEvent(this, 'focus', { value: textarea.value, height: textarea.scrollHeight })\n })\n textarea.addEventListener('blur', () => {\n dispatchMiniProgramEvent(this, 'blur', createInputEventDetail(textarea))\n })\n textarea.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' && !event.shiftKey) {\n dispatchMiniProgramEvent(this, 'confirm', { value: textarea.value })\n }\n })\n root.append(style, textarea)\n this.#textarea = textarea\n }\n\n #syncAttributes() {\n if (!this.#textarea) {\n return\n }\n const value = this.getAttribute('value') ?? ''\n if (this.#textarea.value !== value) {\n this.#textarea.value = value\n }\n this.#textarea.placeholder = this.getAttribute('placeholder') ?? ''\n this.#textarea.disabled = readBooleanAttribute(this, 'disabled')\n const maxlength = resolveMaxLength(this.getAttribute('maxlength'))\n if (maxlength === undefined) {\n this.#textarea.removeAttribute('maxlength')\n }\n else {\n this.#textarea.maxLength = maxlength\n }\n const confirmType = this.getAttribute('confirm-type')\n if (confirmType) {\n this.#textarea.enterKeyHint = confirmType === 'send' ? 'send' : confirmType as HTMLTextAreaElement['enterKeyHint']\n }\n this.#updateLineMetrics(false)\n }\n\n #syncFocus() {\n if (!readBooleanAttribute(this, 'focus') && !readBooleanAttribute(this, 'auto-focus')) {\n return\n }\n queueMicrotask(() => this.focus())\n }\n\n #updateLineMetrics(emit: boolean) {\n const detail = createTextareaLineChangeDetail(this.#textarea!)\n if (detail.lineCount === this.#lastLineCount && detail.height === this.#lastHeight) {\n return\n }\n this.#lastLineCount = detail.lineCount\n this.#lastHeight = detail.height\n if (readBooleanAttribute(this, 'auto-height') && detail.height > 0) {\n this.style.height = `${detail.height}px`\n }\n if (emit) {\n dispatchMiniProgramEvent(this, 'linechange', detail)\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/runtime/nativeComponents/video/index.ts"],"sourcesContent":["import { getNativeComponentDescriptor } from '../../../shared/nativeComponents'\nimport { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from '../helpers'\nimport { registerNativeMediaElement, unregisterNativeMediaElement } from '../mediaRegistry'\nimport { ensureNativeComponentStyle } from '../style'\nimport {\n createVideoProgressDetail,\n createVideoTimeUpdateDetail,\n resolveVideoDirection,\n resolveVideoObjectFit,\n} from './helpers'\nimport { VIDEO_SHADOW_STYLE } from './style'\n\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nfunction readFiniteNumber(value: string | null) {\n if (value === null || value.trim() === '') {\n return undefined\n }\n const number = Number(value)\n return Number.isFinite(number) ? number : undefined\n}\n\nfunction resolveBufferedEnd(video: HTMLVideoElement) {\n const { buffered } = video\n if (!buffered || buffered.length === 0) {\n return 0\n }\n try {\n return buffered.end(buffered.length - 1)\n }\n catch {\n return 0\n }\n}\n\nexport class WeappVideo extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('video')!.attributes]\n\n #video?: HTMLVideoElement\n #fullscreenTarget?: Document\n\n get videoElement() {\n return this.#video\n }\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n this.#ensureStructure()\n this.#syncAttributes()\n this.#connectFullscreenListener()\n }\n\n disconnectedCallback() {\n if (this.#video) {\n unregisterNativeMediaElement(this.#video)\n }\n this.#fullscreenTarget?.removeEventListener('fullscreenchange', this.#handleFullscreenChange)\n this.#fullscreenTarget = undefined\n }\n\n attributeChangedCallback() {\n this.#syncAttributes()\n }\n\n #ensureStructure() {\n if (this.#video || typeof document === 'undefined') {\n return\n }\n const root = this.shadowRoot ?? this.attachShadow({ mode: 'open' })\n const style = document.createElement('style')\n style.textContent = VIDEO_SHADOW_STYLE\n const video = document.createElement('video')\n for (const eventName of ['play', 'pause', 'ended', 'waiting'] as const) {\n video.addEventListener(eventName, (event) => {\n event.stopPropagation()\n dispatchMiniProgramEvent(this, eventName, {})\n })\n }\n video.addEventListener('timeupdate', (event) => {\n event.stopPropagation()\n dispatchMiniProgramEvent(this, 'timeupdate', createVideoTimeUpdateDetail(video.currentTime, video.duration))\n })\n video.addEventListener('progress', (event) => {\n event.stopPropagation()\n dispatchMiniProgramEvent(this, 'progress', createVideoProgressDetail(resolveBufferedEnd(video), video.duration))\n })\n video.addEventListener('loadedmetadata', (event) => {\n event.stopPropagation()\n dispatchMiniProgramEvent(this, 'loadedmetadata', {\n width: video.videoWidth,\n height: video.videoHeight,\n duration: Number.isFinite(video.duration) ? video.duration : 0,\n })\n })\n video.addEventListener('error', (event) => {\n event.stopPropagation()\n dispatchMiniProgramEvent(this, 'error', {\n errMsg: video.error?.message || 'video load failed',\n }, {\n bubbles: false,\n composed: false,\n })\n })\n root.append(style, video)\n this.#video = video\n }\n\n #syncAttributes() {\n const video = this.#video\n if (!video) {\n return\n }\n const src = this.getAttribute('src')\n if (src) {\n video.src = src\n }\n else {\n video.removeAttribute('src')\n }\n video.poster = this.getAttribute('poster') ?? ''\n video.autoplay = readBooleanAttribute(this, 'autoplay')\n video.loop = readBooleanAttribute(this, 'loop')\n video.muted = readBooleanAttribute(this, 'muted')\n video.controls = this.getAttribute('controls') === null || readBooleanAttribute(this, 'controls')\n video.style.objectFit = resolveVideoObjectFit(this.getAttribute('object-fit'))\n const initialTime = readFiniteNumber(this.getAttribute('initial-time'))\n if (initialTime !== undefined && initialTime >= 0) {\n try {\n video.currentTime = initialTime\n }\n catch {\n // ignore browsers that block currentTime mutation before metadata loads\n }\n }\n registerNativeMediaElement('video', [this.getAttribute('id')], video)\n }\n\n #connectFullscreenListener() {\n const target = this.ownerDocument\n if (this.#fullscreenTarget === target) {\n return\n }\n this.#fullscreenTarget?.removeEventListener('fullscreenchange', this.#handleFullscreenChange)\n target.addEventListener('fullscreenchange', this.#handleFullscreenChange)\n this.#fullscreenTarget = target\n }\n\n #handleFullscreenChange = (event: Event) => {\n if (event.target !== this.#fullscreenTarget) {\n return\n }\n const video = this.#video!\n const target = this.#fullscreenTarget!\n dispatchMiniProgramEvent(this, 'fullscreenchange', {\n fullScreen: target.fullscreenElement === video,\n direction: resolveVideoDirection(video.videoWidth, video.videoHeight),\n })\n }\n}\n"],"mappings":"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"}
|