@vielzeug/refine 1.5.3 → 1.7.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/accordion.cjs +1 -1
- package/dist/accordion.cjs.map +1 -1
- package/dist/accordion.js +30 -28
- package/dist/accordion.js.map +1 -1
- package/dist/button-group.cjs.map +1 -1
- package/dist/button-group.js.map +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.cjs.map +1 -1
- package/dist/button.js +1 -0
- package/dist/button.js.map +1 -1
- package/dist/checkbox-group.cjs +3 -3
- package/dist/checkbox-group.cjs.map +1 -1
- package/dist/checkbox-group.js +51 -58
- package/dist/checkbox-group.js.map +1 -1
- package/dist/combobox.cjs +29 -28
- package/dist/combobox.cjs.map +1 -1
- package/dist/combobox.js +201 -195
- package/dist/combobox.js.map +1 -1
- package/dist/content/card/card.css.cjs +1 -1
- package/dist/content/card/card.css.cjs.map +1 -1
- package/dist/content/card/card.css.js +1 -1
- package/dist/content/card/card.css.js.map +1 -1
- package/dist/content/chat-message/chat-message.css.cjs +1 -1
- package/dist/content/chat-message/chat-message.css.cjs.map +1 -1
- package/dist/content/chat-message/chat-message.css.js +1 -1
- package/dist/content/chat-message/chat-message.css.js.map +1 -1
- package/dist/content/icon/icon.d.ts.map +1 -1
- package/dist/content/index.d.ts +4 -0
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/list/_list-item-reveal.cjs +2 -0
- package/dist/content/list/_list-item-reveal.cjs.map +1 -0
- package/dist/content/list/_list-item-reveal.d.ts +25 -0
- package/dist/content/list/_list-item-reveal.d.ts.map +1 -0
- package/dist/content/list/_list-item-reveal.js +33 -0
- package/dist/content/list/_list-item-reveal.js.map +1 -0
- package/dist/content/list/list-item.css.cjs +2 -0
- package/dist/content/list/list-item.css.cjs.map +1 -0
- package/dist/content/list/list-item.css.js +6 -0
- package/dist/content/list/list-item.css.js.map +1 -0
- package/dist/content/list/list-item.d.ts +111 -0
- package/dist/content/list/list-item.d.ts.map +1 -0
- package/dist/content/list/list.css.cjs +2 -0
- package/dist/content/list/list.css.cjs.map +1 -0
- package/dist/content/list/list.css.js +6 -0
- package/dist/content/list/list.css.js.map +1 -0
- package/dist/content/list/list.d.ts +93 -0
- package/dist/content/list/list.d.ts.map +1 -0
- package/dist/custom-elements.json +5224 -4621
- package/dist/date-picker.cjs +2 -1
- package/dist/date-picker.cjs.map +1 -1
- package/dist/date-picker.js +2 -0
- package/dist/date-picker.js.map +1 -1
- package/dist/disclosure/tab-item/tab-item.d.ts.map +1 -1
- package/dist/disclosure/tab-panel/tab-panel.d.ts.map +1 -1
- package/dist/disclosure/tabs/tabs.d.ts.map +1 -1
- package/dist/drawer.cjs +1 -1
- package/dist/drawer.cjs.map +1 -1
- package/dist/drawer.js +47 -48
- package/dist/drawer.js.map +1 -1
- package/dist/file-input.cjs +111 -45
- package/dist/file-input.cjs.map +1 -1
- package/dist/file-input.js +216 -156
- package/dist/file-input.js.map +1 -1
- package/dist/headless/aria-reflection.cjs +2 -0
- package/dist/headless/aria-reflection.cjs.map +1 -0
- package/dist/headless/aria-reflection.d.ts +27 -0
- package/dist/headless/aria-reflection.d.ts.map +1 -0
- package/dist/headless/aria-reflection.js +18 -0
- package/dist/headless/aria-reflection.js.map +1 -0
- package/dist/headless/checkable.cjs +1 -1
- package/dist/headless/checkable.cjs.map +1 -1
- package/dist/headless/checkable.d.ts +2 -10
- package/dist/headless/checkable.d.ts.map +1 -1
- package/dist/headless/checkable.js +29 -29
- package/dist/headless/checkable.js.map +1 -1
- package/dist/headless/choice-field.cjs +1 -1
- package/dist/headless/choice-field.cjs.map +1 -1
- package/dist/headless/choice-field.d.ts +2 -7
- package/dist/headless/choice-field.d.ts.map +1 -1
- package/dist/headless/choice-field.js +37 -37
- package/dist/headless/choice-field.js.map +1 -1
- package/dist/headless/field-base.cjs +1 -1
- package/dist/headless/field-base.cjs.map +1 -1
- package/dist/headless/field-base.d.ts +17 -0
- package/dist/headless/field-base.d.ts.map +1 -1
- package/dist/headless/field-base.js +21 -6
- package/dist/headless/field-base.js.map +1 -1
- package/dist/headless/focus.cjs +1 -1
- package/dist/headless/focus.cjs.map +1 -1
- package/dist/headless/focus.d.ts +7 -0
- package/dist/headless/focus.d.ts.map +1 -1
- package/dist/headless/focus.js +6 -6
- package/dist/headless/focus.js.map +1 -1
- package/dist/headless/index.d.ts +4 -2
- package/dist/headless/index.d.ts.map +1 -1
- package/dist/headless/nav.cjs +1 -1
- package/dist/headless/nav.cjs.map +1 -1
- package/dist/headless/nav.d.ts +12 -0
- package/dist/headless/nav.d.ts.map +1 -1
- package/dist/headless/nav.js +68 -50
- package/dist/headless/nav.js.map +1 -1
- package/dist/headless/overlay.cjs +1 -1
- package/dist/headless/overlay.cjs.map +1 -1
- package/dist/headless/overlay.d.ts +2 -0
- package/dist/headless/overlay.d.ts.map +1 -1
- package/dist/headless/overlay.js +8 -5
- package/dist/headless/overlay.js.map +1 -1
- package/dist/headless/ref-callback.cjs +2 -0
- package/dist/headless/ref-callback.cjs.map +1 -0
- package/dist/headless/ref-callback.d.ts +26 -0
- package/dist/headless/ref-callback.d.ts.map +1 -0
- package/dist/headless/ref-callback.js +13 -0
- package/dist/headless/ref-callback.js.map +1 -0
- package/dist/headless/swipe.cjs +1 -1
- package/dist/headless/swipe.cjs.map +1 -1
- package/dist/headless/swipe.d.ts +2 -0
- package/dist/headless/swipe.d.ts.map +1 -1
- package/dist/headless/swipe.js +26 -21
- package/dist/headless/swipe.js.map +1 -1
- package/dist/headless.cjs +1 -1
- package/dist/headless.js +28 -26
- package/dist/icon.cjs +1 -1
- package/dist/icon.cjs.map +1 -1
- package/dist/icon.js +36 -38
- package/dist/icon.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +63 -61
- package/dist/input.cjs +29 -26
- package/dist/input.cjs.map +1 -1
- package/dist/input.js +91 -79
- package/dist/input.js.map +1 -1
- package/dist/inputs/button/button.css.cjs +1 -1
- package/dist/inputs/button/button.css.cjs.map +1 -1
- package/dist/inputs/button/button.css.js +1 -1
- package/dist/inputs/button/button.css.js.map +1 -1
- package/dist/inputs/button/button.d.ts +8 -0
- package/dist/inputs/button/button.d.ts.map +1 -1
- package/dist/inputs/checkbox/checkbox.css.cjs +1 -1
- package/dist/inputs/checkbox/checkbox.css.cjs.map +1 -1
- package/dist/inputs/checkbox/checkbox.css.js +1 -1
- package/dist/inputs/checkbox/checkbox.css.js.map +1 -1
- package/dist/inputs/combobox/combobox.d.ts +1 -0
- package/dist/inputs/combobox/combobox.d.ts.map +1 -1
- package/dist/inputs/date-picker/date-picker.css.cjs +1 -1
- package/dist/inputs/date-picker/date-picker.css.cjs.map +1 -1
- package/dist/inputs/date-picker/date-picker.css.js +1 -1
- package/dist/inputs/date-picker/date-picker.css.js.map +1 -1
- package/dist/inputs/date-picker/date-picker.d.ts +6 -0
- package/dist/inputs/date-picker/date-picker.d.ts.map +1 -1
- package/dist/inputs/file-input/file-input-upload.cjs +2 -0
- package/dist/inputs/file-input/file-input-upload.cjs.map +1 -0
- package/dist/inputs/file-input/file-input-upload.d.ts +76 -0
- package/dist/inputs/file-input/file-input-upload.d.ts.map +1 -0
- package/dist/inputs/file-input/file-input-upload.js +145 -0
- package/dist/inputs/file-input/file-input-upload.js.map +1 -0
- package/dist/inputs/file-input/file-input.css.cjs +1 -1
- package/dist/inputs/file-input/file-input.css.cjs.map +1 -1
- package/dist/inputs/file-input/file-input.css.js +1 -1
- package/dist/inputs/file-input/file-input.css.js.map +1 -1
- package/dist/inputs/file-input/file-input.d.ts +54 -1
- package/dist/inputs/file-input/file-input.d.ts.map +1 -1
- package/dist/inputs/input/input.css.cjs +1 -1
- package/dist/inputs/input/input.css.cjs.map +1 -1
- package/dist/inputs/input/input.css.js +1 -1
- package/dist/inputs/input/input.css.js.map +1 -1
- package/dist/inputs/input/input.d.ts +13 -0
- package/dist/inputs/input/input.d.ts.map +1 -1
- package/dist/inputs/message-composer/message-composer.css.cjs +1 -1
- package/dist/inputs/message-composer/message-composer.css.cjs.map +1 -1
- package/dist/inputs/message-composer/message-composer.css.js +1 -1
- package/dist/inputs/message-composer/message-composer.css.js.map +1 -1
- package/dist/inputs/message-composer/message-composer.d.ts +7 -0
- package/dist/inputs/message-composer/message-composer.d.ts.map +1 -1
- package/dist/inputs/number-input/number-input.css.cjs +1 -1
- package/dist/inputs/number-input/number-input.css.cjs.map +1 -1
- package/dist/inputs/number-input/number-input.css.js +1 -1
- package/dist/inputs/number-input/number-input.css.js.map +1 -1
- package/dist/inputs/number-input/number-input.d.ts +15 -0
- package/dist/inputs/number-input/number-input.d.ts.map +1 -1
- package/dist/inputs/otp-input/otp-input.css.cjs +1 -1
- package/dist/inputs/otp-input/otp-input.css.cjs.map +1 -1
- package/dist/inputs/otp-input/otp-input.css.js +1 -1
- package/dist/inputs/otp-input/otp-input.css.js.map +1 -1
- package/dist/inputs/radio/radio.d.ts.map +1 -1
- package/dist/inputs/select/select.d.ts +1 -0
- package/dist/inputs/select/select.d.ts.map +1 -1
- package/dist/inputs/shared/index.d.ts +1 -1
- package/dist/inputs/shared/index.d.ts.map +1 -1
- package/dist/inputs/shared/templates.cjs +26 -3
- package/dist/inputs/shared/templates.cjs.map +1 -1
- package/dist/inputs/shared/templates.d.ts +20 -0
- package/dist/inputs/shared/templates.d.ts.map +1 -1
- package/dist/inputs/shared/templates.js +29 -5
- package/dist/inputs/shared/templates.js.map +1 -1
- package/dist/inputs/switch/switch.css.cjs +1 -1
- package/dist/inputs/switch/switch.css.cjs.map +1 -1
- package/dist/inputs/switch/switch.css.js +1 -1
- package/dist/inputs/switch/switch.css.js.map +1 -1
- package/dist/inputs/switch/switch.d.ts.map +1 -1
- package/dist/inputs/textarea/textarea.css.cjs +1 -1
- package/dist/inputs/textarea/textarea.css.cjs.map +1 -1
- package/dist/inputs/textarea/textarea.css.js +1 -1
- package/dist/inputs/textarea/textarea.css.js.map +1 -1
- package/dist/inputs/textarea/textarea.d.ts +14 -0
- package/dist/inputs/textarea/textarea.d.ts.map +1 -1
- package/dist/inputs/time-picker/time-picker.css.cjs +1 -1
- package/dist/inputs/time-picker/time-picker.css.cjs.map +1 -1
- package/dist/inputs/time-picker/time-picker.css.js +1 -1
- package/dist/inputs/time-picker/time-picker.css.js.map +1 -1
- package/dist/inputs/time-picker/time-picker.d.ts +6 -0
- package/dist/inputs/time-picker/time-picker.d.ts.map +1 -1
- package/dist/list-item.cjs +22 -0
- package/dist/list-item.cjs.map +1 -0
- package/dist/list-item.js +91 -0
- package/dist/list-item.js.map +1 -0
- package/dist/list.cjs +2 -0
- package/dist/list.cjs.map +1 -0
- package/dist/list.js +64 -0
- package/dist/list.js.map +1 -0
- package/dist/menu.cjs +4 -4
- package/dist/menu.cjs.map +1 -1
- package/dist/menu.js +60 -59
- package/dist/menu.js.map +1 -1
- package/dist/message-composer.cjs +14 -20
- package/dist/message-composer.cjs.map +1 -1
- package/dist/message-composer.js +63 -64
- package/dist/message-composer.js.map +1 -1
- package/dist/number-input.cjs +5 -3
- package/dist/number-input.cjs.map +1 -1
- package/dist/number-input.js +8 -4
- package/dist/number-input.js.map +1 -1
- package/dist/otp-input.cjs +9 -9
- package/dist/otp-input.cjs.map +1 -1
- package/dist/otp-input.js +70 -62
- package/dist/otp-input.js.map +1 -1
- package/dist/overlay/menu/menu-item.css.cjs +1 -1
- package/dist/overlay/menu/menu-item.css.cjs.map +1 -1
- package/dist/overlay/menu/menu-item.css.js +1 -1
- package/dist/overlay/menu/menu-item.css.js.map +1 -1
- package/dist/overlay/menu/menu-separator.css.cjs +1 -1
- package/dist/overlay/menu/menu-separator.css.cjs.map +1 -1
- package/dist/overlay/menu/menu-separator.css.js +1 -1
- package/dist/overlay/menu/menu-separator.css.js.map +1 -1
- package/dist/overlay/menu/menu.css.cjs +1 -1
- package/dist/overlay/menu/menu.css.cjs.map +1 -1
- package/dist/overlay/menu/menu.css.js +1 -1
- package/dist/overlay/menu/menu.css.js.map +1 -1
- package/dist/overlay/shared/use-dialog.cjs +1 -1
- package/dist/overlay/shared/use-dialog.cjs.map +1 -1
- package/dist/overlay/shared/use-dialog.d.ts.map +1 -1
- package/dist/overlay/shared/use-dialog.js +7 -6
- package/dist/overlay/shared/use-dialog.js.map +1 -1
- package/dist/radio-group.cjs +3 -3
- package/dist/radio-group.cjs.map +1 -1
- package/dist/radio-group.js +64 -70
- package/dist/radio-group.js.map +1 -1
- package/dist/radio.cjs +4 -4
- package/dist/radio.cjs.map +1 -1
- package/dist/radio.js +58 -58
- package/dist/radio.js.map +1 -1
- package/dist/rating.cjs.map +1 -1
- package/dist/rating.js.map +1 -1
- package/dist/refine.cjs +426 -233
- package/dist/refine.cjs.map +1 -1
- package/dist/refine.iife.js +431 -238
- package/dist/refine.iife.js.map +1 -1
- package/dist/refine.js +452 -259
- package/dist/refine.js.map +1 -1
- package/dist/select.cjs +21 -21
- package/dist/select.cjs.map +1 -1
- package/dist/select.js +135 -127
- package/dist/select.js.map +1 -1
- package/dist/shared/size-presets.cjs +1 -1
- package/dist/shared/size-presets.cjs.map +1 -1
- package/dist/shared/size-presets.d.ts +74 -0
- package/dist/shared/size-presets.d.ts.map +1 -1
- package/dist/shared/size-presets.js +48 -1
- package/dist/shared/size-presets.js.map +1 -1
- package/dist/shared/types.d.ts +5 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/styles/index.cjs +1 -1
- package/dist/styles/index.cjs.map +1 -1
- package/dist/styles/index.d.ts +1 -0
- package/dist/styles/index.d.ts.map +1 -1
- package/dist/styles/index.js +5 -4
- package/dist/styles/index.js.map +1 -1
- package/dist/styles/mixins/field-variants.css.cjs +85 -0
- package/dist/styles/mixins/field-variants.css.cjs.map +1 -0
- package/dist/styles/mixins/field-variants.css.d.ts +66 -0
- package/dist/styles/mixins/field-variants.css.d.ts.map +1 -0
- package/dist/styles/mixins/field-variants.css.js +90 -0
- package/dist/styles/mixins/field-variants.css.js.map +1 -0
- package/dist/switch.cjs +3 -3
- package/dist/switch.cjs.map +1 -1
- package/dist/switch.js +38 -36
- package/dist/switch.js.map +1 -1
- package/dist/tab-item.cjs +8 -8
- package/dist/tab-item.cjs.map +1 -1
- package/dist/tab-item.js +38 -28
- package/dist/tab-item.js.map +1 -1
- package/dist/tab-panel.cjs +7 -7
- package/dist/tab-panel.cjs.map +1 -1
- package/dist/tab-panel.js +34 -26
- package/dist/tab-panel.js.map +1 -1
- package/dist/tabs.cjs +4 -4
- package/dist/tabs.cjs.map +1 -1
- package/dist/tabs.js +64 -60
- package/dist/tabs.js.map +1 -1
- package/dist/textarea.cjs +15 -18
- package/dist/textarea.cjs.map +1 -1
- package/dist/textarea.js +83 -74
- package/dist/textarea.js.map +1 -1
- package/dist/time-picker.cjs +34 -31
- package/dist/time-picker.cjs.map +1 -1
- package/dist/time-picker.js +121 -109
- package/dist/time-picker.js.map +1 -1
- package/package.json +21 -9
- package/dist/headless/dialog-focus.cjs +0 -2
- package/dist/headless/dialog-focus.cjs.map +0 -1
- package/dist/headless/dialog-focus.d.ts +0 -40
- package/dist/headless/dialog-focus.d.ts.map +0 -1
- package/dist/headless/dialog-focus.js +0 -22
- package/dist/headless/dialog-focus.js.map +0 -1
- package/dist/headless/focus-trap.cjs +0 -2
- package/dist/headless/focus-trap.cjs.map +0 -1
- package/dist/headless/focus-trap.d.ts +0 -45
- package/dist/headless/focus-trap.d.ts.map +0 -1
- package/dist/headless/focus-trap.js +0 -51
- package/dist/headless/focus-trap.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swipe.js","names":[],"sources":["../../src/headless/swipe.ts"],"sourcesContent":["import type { Readable } from '@vielzeug/ripple';\n\nexport type SwipeAxis = 'x' | 'y';\n\nexport type SwipeControlDetail = {\n axis: SwipeAxis;\n current: number;\n distance: number;\n event: PointerEvent;\n pointerId: number;\n progress: number;\n start: number;\n threshold: number;\n};\n\nexport type SwipeControlOptions = {\n axis?: () => SwipeAxis;\n captureTarget?: (event: PointerEvent) => HTMLElement | null;\n disabled?: Readable<boolean | undefined>;\n /** Called when the platform interrupts an in-flight swipe (`pointercancel`). */\n onCancel?: (detail: SwipeControlDetail) => void;\n onCommit?: (detail: SwipeControlDetail) => void;\n onMove?: (detail: SwipeControlDetail) => void;\n /** Called when the pointer is released (`pointerup`) without crossing the commit threshold. */\n onRelease?: (detail: SwipeControlDetail) => void;\n onStart?: (detail: SwipeControlDetail) => void;\n shouldCommit?: (detail: SwipeControlDetail) => boolean;\n threshold?: () => number;\n};\n\nexport type SwipeControl = {\n [Symbol.dispose](): void;\n /** Cancel any in-flight swipe and clean up internal state. */\n dispose: () => void;\n handlePointerCancel: (event: PointerEvent) => boolean;\n handlePointerDown: (event: PointerEvent) => boolean;\n handlePointerMove: (event: PointerEvent) => boolean;\n handlePointerUp: (event: PointerEvent) => boolean;\n isActive: () => boolean;\n};\n\ntype ActiveSwipe = {\n axis: SwipeAxis;\n pointerId: number;\n start: number;\n threshold: number;\n};\n\nconst resolveAxis = (options: SwipeControlOptions): SwipeAxis => options.axis?.() ?? 'x';\n\nconst resolveThreshold = (options: SwipeControlOptions): number => {\n const threshold = options.threshold?.() ?? 48;\n\n return Number.isFinite(threshold) && threshold > 0 ? threshold : 1;\n};\n\nconst getCoordinate = (event: PointerEvent, axis: SwipeAxis): number => {\n return axis === 'x' ? event.clientX : event.clientY;\n};\n\nconst defaultCaptureTarget = (event: PointerEvent): HTMLElement | null => {\n if (event.currentTarget instanceof HTMLElement) return event.currentTarget;\n\n if (event.target instanceof HTMLElement) return event.target;\n\n return null;\n};\n\nexport const createSwipeControl = (options: SwipeControlOptions): SwipeControl => {\n let active: ActiveSwipe | null = null;\n\n const isDisabled = (): boolean => Boolean(options.disabled?.value);\n\n const reset = (): void => {\n active = null;\n };\n\n const matchesPointer = (event: PointerEvent): boolean => {\n return active?.pointerId === event.pointerId;\n };\n\n const createDetail = (event: PointerEvent): SwipeControlDetail | null => {\n if (!active) return null;\n\n const current = getCoordinate(event, active.axis);\n const distance = current - active.start;\n\n return {\n axis: active.axis,\n current,\n distance,\n event,\n pointerId: active.pointerId,\n progress: Math.min(Math.abs(distance) / active.threshold, 1),\n start: active.start,\n threshold: active.threshold,\n };\n };\n\n const handlePointerDown = (event: PointerEvent): boolean => {\n if (active || isDisabled()) return false;\n\n const axis = resolveAxis(options);\n\n active = {\n axis,\n pointerId: event.pointerId,\n start: getCoordinate(event, axis),\n threshold: resolveThreshold(options),\n };\n\n const captureTarget =\n typeof options.captureTarget === 'function' ? options.captureTarget(event) : defaultCaptureTarget(event);\n\n captureTarget?.setPointerCapture?.(event.pointerId);\n\n const detail = createDetail(event);\n\n if (detail) options.onStart?.(detail);\n\n return true;\n };\n\n const handlePointerMove = (event: PointerEvent): boolean => {\n if (!active || !matchesPointer(event)) return false;\n\n const detail = createDetail(event);\n\n if (!detail) return false;\n\n options.onMove?.(detail);\n\n const shouldCommit = options.shouldCommit?.(detail) ?? Math.abs(detail.distance) >= detail.threshold;\n\n if (!shouldCommit) return true;\n\n reset();\n options.onCommit?.(detail);\n\n return true;\n };\n\n const handlePointerUp = (event: PointerEvent): boolean => {\n if (!active || !matchesPointer(event)) return false;\n\n const detail = createDetail(event);\n\n reset();\n\n if (detail) options.onRelease?.(detail);\n\n return true;\n };\n\n const handlePointerCancel = (event: PointerEvent): boolean => {\n if (!active || !matchesPointer(event)) return false;\n\n const detail = createDetail(event);\n\n reset();\n\n if (detail) options.onCancel?.(detail);\n\n return true;\n };\n\n return {\n dispose
|
|
1
|
+
{"version":3,"file":"swipe.js","names":[],"sources":["../../src/headless/swipe.ts"],"sourcesContent":["import type { Readable } from '@vielzeug/ripple';\n\nexport type SwipeAxis = 'x' | 'y';\n\nexport type SwipeControlDetail = {\n axis: SwipeAxis;\n current: number;\n distance: number;\n event: PointerEvent;\n pointerId: number;\n progress: number;\n start: number;\n threshold: number;\n};\n\nexport type SwipeControlOptions = {\n axis?: () => SwipeAxis;\n captureTarget?: (event: PointerEvent) => HTMLElement | null;\n disabled?: Readable<boolean | undefined>;\n /** Called when the platform interrupts an in-flight swipe (`pointercancel`). */\n onCancel?: (detail: SwipeControlDetail) => void;\n onCommit?: (detail: SwipeControlDetail) => void;\n onMove?: (detail: SwipeControlDetail) => void;\n /** Called when the pointer is released (`pointerup`) without crossing the commit threshold. */\n onRelease?: (detail: SwipeControlDetail) => void;\n onStart?: (detail: SwipeControlDetail) => void;\n shouldCommit?: (detail: SwipeControlDetail) => boolean;\n threshold?: () => number;\n};\n\nexport type SwipeControl = {\n [Symbol.dispose](): void;\n /** Cancel any in-flight swipe and clean up internal state. */\n dispose: () => void;\n /** `true` after `dispose()` has been called. */\n readonly disposed: boolean;\n handlePointerCancel: (event: PointerEvent) => boolean;\n handlePointerDown: (event: PointerEvent) => boolean;\n handlePointerMove: (event: PointerEvent) => boolean;\n handlePointerUp: (event: PointerEvent) => boolean;\n isActive: () => boolean;\n};\n\ntype ActiveSwipe = {\n axis: SwipeAxis;\n pointerId: number;\n start: number;\n threshold: number;\n};\n\nconst resolveAxis = (options: SwipeControlOptions): SwipeAxis => options.axis?.() ?? 'x';\n\nconst resolveThreshold = (options: SwipeControlOptions): number => {\n const threshold = options.threshold?.() ?? 48;\n\n return Number.isFinite(threshold) && threshold > 0 ? threshold : 1;\n};\n\nconst getCoordinate = (event: PointerEvent, axis: SwipeAxis): number => {\n return axis === 'x' ? event.clientX : event.clientY;\n};\n\nconst defaultCaptureTarget = (event: PointerEvent): HTMLElement | null => {\n if (event.currentTarget instanceof HTMLElement) return event.currentTarget;\n\n if (event.target instanceof HTMLElement) return event.target;\n\n return null;\n};\n\nexport const createSwipeControl = (options: SwipeControlOptions): SwipeControl => {\n let active: ActiveSwipe | null = null;\n let disposed = false;\n\n const isDisabled = (): boolean => Boolean(options.disabled?.value);\n\n const reset = (): void => {\n active = null;\n };\n\n const dispose = (): void => {\n disposed = true;\n reset();\n };\n\n const matchesPointer = (event: PointerEvent): boolean => {\n return active?.pointerId === event.pointerId;\n };\n\n const createDetail = (event: PointerEvent): SwipeControlDetail | null => {\n if (!active) return null;\n\n const current = getCoordinate(event, active.axis);\n const distance = current - active.start;\n\n return {\n axis: active.axis,\n current,\n distance,\n event,\n pointerId: active.pointerId,\n progress: Math.min(Math.abs(distance) / active.threshold, 1),\n start: active.start,\n threshold: active.threshold,\n };\n };\n\n const handlePointerDown = (event: PointerEvent): boolean => {\n if (disposed || active || isDisabled()) return false;\n\n const axis = resolveAxis(options);\n\n active = {\n axis,\n pointerId: event.pointerId,\n start: getCoordinate(event, axis),\n threshold: resolveThreshold(options),\n };\n\n const captureTarget =\n typeof options.captureTarget === 'function' ? options.captureTarget(event) : defaultCaptureTarget(event);\n\n captureTarget?.setPointerCapture?.(event.pointerId);\n\n const detail = createDetail(event);\n\n if (detail) options.onStart?.(detail);\n\n return true;\n };\n\n const handlePointerMove = (event: PointerEvent): boolean => {\n if (!active || !matchesPointer(event)) return false;\n\n const detail = createDetail(event);\n\n if (!detail) return false;\n\n options.onMove?.(detail);\n\n const shouldCommit = options.shouldCommit?.(detail) ?? Math.abs(detail.distance) >= detail.threshold;\n\n if (!shouldCommit) return true;\n\n reset();\n options.onCommit?.(detail);\n\n return true;\n };\n\n const handlePointerUp = (event: PointerEvent): boolean => {\n if (!active || !matchesPointer(event)) return false;\n\n const detail = createDetail(event);\n\n reset();\n\n if (detail) options.onRelease?.(detail);\n\n return true;\n };\n\n const handlePointerCancel = (event: PointerEvent): boolean => {\n if (!active || !matchesPointer(event)) return false;\n\n const detail = createDetail(event);\n\n reset();\n\n if (detail) options.onCancel?.(detail);\n\n return true;\n };\n\n return {\n dispose,\n get disposed() {\n return disposed;\n },\n handlePointerCancel,\n handlePointerDown,\n handlePointerMove,\n handlePointerUp,\n isActive: () => active != null,\n [Symbol.dispose]: dispose,\n };\n};\n"],"mappings":";AAkDA,IAAM,KAAe,MAA4C,EAAQ,OAAO,KAAK,KAE/E,KAAoB,MAAyC;CACjE,IAAM,IAAY,EAAQ,YAAY,KAAK;CAE3C,OAAO,OAAO,SAAS,CAAS,KAAK,IAAY,IAAI,IAAY;AACnE,GAEM,KAAiB,GAAqB,MACnC,MAAS,MAAM,EAAM,UAAU,EAAM,SAGxC,KAAwB,MACxB,EAAM,yBAAyB,cAAoB,EAAM,gBAEzD,EAAM,kBAAkB,cAAoB,EAAM,SAE/C,MAGI,KAAsB,MAA+C;CAChF,IAAI,IAA6B,MAC7B,IAAW,IAET,UAA4B,EAAQ,EAAQ,UAAU,OAEtD,UAAoB;EACxB,IAAS;CACX,GAEM,UAAsB;EAE1B,AADA,IAAW,IACX,EAAM;CACR,GAEM,KAAkB,MACf,GAAQ,cAAc,EAAM,WAG/B,KAAgB,MAAmD;EACvE,IAAI,CAAC,GAAQ,OAAO;EAEpB,IAAM,IAAU,EAAc,GAAO,EAAO,IAAI,GAC1C,IAAW,IAAU,EAAO;EAElC,OAAO;GACL,MAAM,EAAO;GACb;GACA;GACA;GACA,WAAW,EAAO;GAClB,UAAU,KAAK,IAAI,KAAK,IAAI,CAAQ,IAAI,EAAO,WAAW,CAAC;GAC3D,OAAO,EAAO;GACd,WAAW,EAAO;EACpB;CACF;CAqEA,OAAO;EACL;EACA,IAAI,WAAW;GACb,OAAO;EACT;EACA,sBAjB2B,MAAiC;GAC5D,IAAI,CAAC,KAAU,CAAC,EAAe,CAAK,GAAG,OAAO;GAE9C,IAAM,IAAS,EAAa,CAAK;GAMjC,OAJA,EAAM,GAEF,KAAQ,EAAQ,WAAW,CAAM,GAE9B;EACT;EAQE,oBAzEyB,MAAiC;GAC1D,IAAI,KAAY,KAAU,EAAW,GAAG,OAAO;GAE/C,IAAM,IAAO,EAAY,CAAO;GAYhC,AAVA,IAAS;IACP;IACA,WAAW,EAAM;IACjB,OAAO,EAAc,GAAO,CAAI;IAChC,WAAW,EAAiB,CAAO;GACrC,IAGE,OAAO,EAAQ,iBAAkB,aAAa,EAAQ,cAAc,CAAK,IAAI,EAAqB,CAAK,EAAA,EAE1F,oBAAoB,EAAM,SAAS;GAElD,IAAM,IAAS,EAAa,CAAK;GAIjC,OAFI,KAAQ,EAAQ,UAAU,CAAM,GAE7B;EACT;EAoDE,oBAlDyB,MAAiC;GAC1D,IAAI,CAAC,KAAU,CAAC,EAAe,CAAK,GAAG,OAAO;GAE9C,IAAM,IAAS,EAAa,CAAK;GAajC,OAXK,KAEL,EAAQ,SAAS,CAAM,GAEF,EAAQ,eAAe,CAAM,KAAK,KAAK,IAAI,EAAO,QAAQ,KAAK,EAAO,aAI3F,EAAM,GACN,EAAQ,WAAW,CAAM,GAElB,MALmB,MANN;EAYtB;EAkCE,kBAhCuB,MAAiC;GACxD,IAAI,CAAC,KAAU,CAAC,EAAe,CAAK,GAAG,OAAO;GAE9C,IAAM,IAAS,EAAa,CAAK;GAMjC,OAJA,EAAM,GAEF,KAAQ,EAAQ,YAAY,CAAM,GAE/B;EACT;EAuBE,gBAAgB,KAAU;GACzB,OAAO,UAAU;CACpB;AACF"}
|
package/dist/headless.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./headless/ore.cjs"),t=require("./headless/auto-resize.cjs"),n=require("./headless/
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./headless/ore.cjs"),t=require("./headless/auto-resize.cjs"),n=require("./headless/ref-callback.cjs"),r=require("./headless/aria-reflection.cjs"),i=require("./headless/field-base.cjs"),a=require("./headless/signals.cjs"),o=require("./headless/text-field.cjs"),s=require("./headless/choice-field.cjs"),c=require("./headless/keyboard.cjs"),l=require("./headless/checkable.cjs"),u=require("./headless/composer.cjs"),d=require("./headless/typeahead.cjs"),f=require("./headless/nav.cjs"),p=require("./headless/overlay.cjs"),m=require("./headless/direction.cjs"),h=require("./headless/positioner.cjs"),g=require("./headless/option-list.cjs"),_=require("./headless/paginated-list.cjs"),v=require("./headless/numbers.cjs"),y=require("./headless/spinner.cjs"),b=require("./headless/slider.cjs"),x=require("./headless/swipe.cjs"),S=require("./headless/announcer.cjs"),C=require("./headless/date-picker.cjs"),w=require("./headless/light-dom.cjs"),T=require("./headless/selection-control.cjs"),E=require("./headless/sort-control.cjs"),D=require("./headless/datagrid.cjs"),O=require("./headless/parse.cjs");exports.announce=S.announce,exports.bindRefCallback=n.bindRefCallback,exports.counterClassName=i.counterClassName,exports.createAssistiveState=i.createAssistiveState,exports.createAutoResize=t.createAutoResize,exports.createCheckable=l.createCheckable,exports.createChoiceField=s.createChoiceField,exports.createComposerControl=u.createComposerControl,exports.createDataGridControl=D.createDataGridControl,exports.createDatePickerControl=C.createDatePickerControl,exports.createDirtyTracker=i.createDirtyTracker,exports.createDropdownPositioner=h.createDropdownPositioner,exports.createErrorHelperState=i.createErrorHelperState,exports.createField=i.createField,exports.createInteraction=c.createInteraction,exports.createLabelState=i.createLabelState,exports.createListControl=f.createListControl,exports.createOptionList=g.createOptionList,exports.createOverlayControl=p.createOverlayControl,exports.createPaginatedList=_.createPaginatedList,exports.createSelectionControl=T.createSelectionControl,exports.createSliderControl=b.createSliderControl,exports.createSortControl=E.createSortControl,exports.createSpinnerControl=y.createSpinnerControl,exports.createSwipeControl=x.createSwipeControl,exports.createTextField=o.createTextField,exports.createTypeahead=d.createTypeahead,exports.dispatchKeyboardAction=c.dispatchKeyboardAction,exports.elementDirection=m.elementDirection,exports.formatDisplayDate=C.formatDisplayDate,exports.getChoiceLabel=w.getChoiceLabel,exports.getLightChildrenByTag=w.getLightChildrenByTag,exports.lifecycleSignal=e.lifecycleSignal,exports.parseIso=C.parseIso,exports.parseStringTriggers=O.parseStringTriggers,exports.setAriaReflection=r.setAriaReflection,exports.syncedSignal=a.syncedSignal,exports.toFiniteNumber=v.toFiniteNumber,exports.toFiniteNumberOr=v.toFiniteNumberOr,exports.toIsoString=C.toIsoString,exports.toPositiveStep=v.toPositiveStep;
|
package/dist/headless.js
CHANGED
|
@@ -1,28 +1,30 @@
|
|
|
1
1
|
import { lifecycleSignal as e } from "./headless/ore.js";
|
|
2
2
|
import { createAutoResize as t } from "./headless/auto-resize.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
|
|
3
|
+
import { bindRefCallback as n } from "./headless/ref-callback.js";
|
|
4
|
+
import { setAriaReflection as r } from "./headless/aria-reflection.js";
|
|
5
|
+
import { counterClassName as i, createAssistiveState as a, createDirtyTracker as o, createErrorHelperState as s, createField as c, createLabelState as l } from "./headless/field-base.js";
|
|
6
|
+
import { syncedSignal as u } from "./headless/signals.js";
|
|
7
|
+
import { createTextField as d } from "./headless/text-field.js";
|
|
8
|
+
import { createChoiceField as f } from "./headless/choice-field.js";
|
|
9
|
+
import { createInteraction as p, dispatchKeyboardAction as m } from "./headless/keyboard.js";
|
|
10
|
+
import { createCheckable as h } from "./headless/checkable.js";
|
|
11
|
+
import { createComposerControl as g } from "./headless/composer.js";
|
|
12
|
+
import { createTypeahead as _ } from "./headless/typeahead.js";
|
|
13
|
+
import { createListControl as v } from "./headless/nav.js";
|
|
14
|
+
import { createOverlayControl as y } from "./headless/overlay.js";
|
|
15
|
+
import { elementDirection as b } from "./headless/direction.js";
|
|
16
|
+
import { createDropdownPositioner as x } from "./headless/positioner.js";
|
|
17
|
+
import { createOptionList as S } from "./headless/option-list.js";
|
|
18
|
+
import { createPaginatedList as C } from "./headless/paginated-list.js";
|
|
19
|
+
import { toFiniteNumber as w, toFiniteNumberOr as T, toPositiveStep as E } from "./headless/numbers.js";
|
|
20
|
+
import { createSpinnerControl as D } from "./headless/spinner.js";
|
|
21
|
+
import { createSliderControl as O } from "./headless/slider.js";
|
|
22
|
+
import { createSwipeControl as k } from "./headless/swipe.js";
|
|
23
|
+
import { announce as A } from "./headless/announcer.js";
|
|
24
|
+
import { createDatePickerControl as j, formatDisplayDate as M, parseIso as N, toIsoString as P } from "./headless/date-picker.js";
|
|
25
|
+
import { getChoiceLabel as F, getLightChildrenByTag as I } from "./headless/light-dom.js";
|
|
26
|
+
import { createSelectionControl as L } from "./headless/selection-control.js";
|
|
27
|
+
import { createSortControl as R } from "./headless/sort-control.js";
|
|
28
|
+
import { createDataGridControl as z } from "./headless/datagrid.js";
|
|
29
|
+
import { parseStringTriggers as B } from "./headless/parse.js";
|
|
30
|
+
export { A as announce, n as bindRefCallback, i as counterClassName, a as createAssistiveState, t as createAutoResize, h as createCheckable, f as createChoiceField, g as createComposerControl, z as createDataGridControl, j as createDatePickerControl, o as createDirtyTracker, x as createDropdownPositioner, s as createErrorHelperState, c as createField, p as createInteraction, l as createLabelState, v as createListControl, S as createOptionList, y as createOverlayControl, C as createPaginatedList, L as createSelectionControl, O as createSliderControl, R as createSortControl, D as createSpinnerControl, k as createSwipeControl, d as createTextField, _ as createTypeahead, m as dispatchKeyboardAction, b as elementDirection, M as formatDisplayDate, F as getChoiceLabel, I as getLightChildrenByTag, e as lifecycleSignal, N as parseIso, B as parseStringTriggers, r as setAriaReflection, u as syncedSignal, w as toFiniteNumber, T as toFiniteNumberOr, P as toIsoString, E as toPositiveStep };
|
package/dist/icon.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./_virtual/_rolldown/runtime.cjs"),t=require("./_dev.cjs"),n=require("./content/icon/icon.css.cjs");let r=require("@vielzeug/ore"),i=require("@vielzeug/ore/directives"),a=require("@vielzeug/ripple"),o=require("lucide");o=e.__toESM(o,1);var s=16,c=2,l=24,u=new Set([`circle`,`clipPath`,`defs`,`ellipse`,`g`,`line`,`linearGradient`,`mask`,`path`,`polygon`,`polyline`,`radialGradient`,`rect`,`stop`,`symbol`,`use`]),
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./_virtual/_rolldown/runtime.cjs"),t=require("./_dev.cjs"),n=require("./content/icon/icon.css.cjs");let r=require("@vielzeug/ore"),i=require("@vielzeug/ore/directives"),a=require("@vielzeug/ripple"),o=require("lucide");o=e.__toESM(o,1);var s=16,c=2,l=24,u=`http://www.w3.org/2000/svg`,d=new Set([`circle`,`clipPath`,`defs`,`ellipse`,`g`,`line`,`linearGradient`,`mask`,`path`,`polygon`,`polyline`,`radialGradient`,`rect`,`stop`,`symbol`,`use`]),f=/^[a-zA-Z][a-zA-Z0-9:_-]*$/,p=/^(on|xlink:|xml:|href$)/i,m=new Map(Object.entries(o.icons));function h(e){for(let[t,n]of Object.entries(e))m.set(t,n)}var g=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).split(/[^a-zA-Z0-9]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(``),_=e=>{if(e==null||e===``)return s;let t=Number(e);return Number.isFinite(t)&&t>0&&/^\d+(\.\d+)?$/.test(e.trim())?t:e},v=e=>m.get(e)??m.get(g(e)),y=(e,t)=>{if(!d.has(e))return null;let n=document.createElementNS(u,e);for(let[e,r]of Object.entries(t))r!==void 0&&(!f.test(e)||p.test(e)||n.setAttribute(e,String(r)));return n},b=`ore-icon`;(0,r.define)(b,{props:{absoluteStrokeWidth:r.prop.bool(),label:r.prop.string(),name:r.prop.string(),size:{default:s,parse:_,reflect:!1},solid:r.prop.bool(),strokeWidth:r.prop.number(c)},setup(e){(0,r.bind)({attr:{"aria-hidden":()=>(e.label.value??``).trim()?null:`true`,"aria-label":()=>(e.label.value??``).trim()||null,role:()=>(e.label.value??``).trim()?`img`:null},style:{"--_size-px":()=>{let t=e.size.value;return typeof t==`number`?`${t}px`:String(t)}}});let n=(0,r.ref)(),o=(0,a.computed)(()=>{let n=(e.name.value??``).trim();if(!n)return;let r=v(n);return r||t.warn(`ore-icon: icon not found: "${n.slice(0,64)}"`),r});return(0,r.watchEffect)(()=>{let t=n.value,r=o.value;if(!t||!r)return;let i=e.size.value,a=typeof i==`number`?i:l,s=e.absoluteStrokeWidth.value&&!e.solid.value?e.strokeWidth.value*(l/a):e.strokeWidth.value;t.setAttribute(`fill`,e.solid.value?`currentColor`:`none`),t.setAttribute(`stroke`,e.solid.value?`none`:`currentColor`),t.setAttribute(`stroke-linecap`,`round`),t.setAttribute(`stroke-linejoin`,`round`),t.setAttribute(`stroke-width`,String(e.solid.value?0:s)),t.setAttribute(`viewBox`,`0 0 24 24`);let c=r.map(([e,t])=>y(e,t)).filter(e=>!!e);t.replaceChildren(...c)}),r.html`${(0,i.when)(()=>!!o.value,()=>r.html`<svg ref="${n}" part="svg" style="width:100%;height:100%"></svg>`)}`},styles:[n.default]}),exports.ICON_TAG=b,exports.registerIcons=h;
|
|
2
2
|
//# sourceMappingURL=icon.cjs.map
|
package/dist/icon.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icon.cjs","names":[],"sources":["../src/content/icon/icon.ts"],"sourcesContent":["import { define, html, prop, bind } from '@vielzeug/ore';\nimport { raw } from '@vielzeug/ore/directives';\nimport { computed } from '@vielzeug/ripple';\nimport * as lucideModule from 'lucide';\n\nimport { warn } from '../../_dev';\nimport styles from './icon.css?inline';\n\nexport type IconNode = Array<[string, Record<string, string | number | undefined>]>;\n\nconst DEFAULT_SIZE = 16;\nconst DEFAULT_STROKE_WIDTH = 2;\nconst LUCIDE_VIEWBOX_SIZE = 24;\n\n/**\n * Allowlisted SVG shape/structure element names. Only these tags are permitted\n * when building the SVG markup from an IconNode, preventing arbitrary element\n * injection (e.g. <script>, event-handler-bearing elements).\n */\nconst ALLOWED_SVG_TAGS = new Set([\n 'circle',\n 'clipPath',\n 'defs',\n 'ellipse',\n 'g',\n 'line',\n 'linearGradient',\n 'mask',\n 'path',\n 'polygon',\n 'polyline',\n 'radialGradient',\n 'rect',\n 'stop',\n 'symbol',\n 'use',\n]);\n\n/**\n * Allowlisted SVG presentation / structural attribute names.\n * Event handler attributes (on*) and \"xlink:href\" are excluded.\n */\nconst ATTR_KEY_RE = /^[a-zA-Z][a-zA-Z0-9:_-]*$/;\nconst BLOCKED_ATTR_RE = /^(on|xlink:|xml:|href$)/i;\n\n// Sync registry seeded from lucide at module load; extend at any time via registerIcons()\nconst registry = new Map<string, IconNode>(\n Object.entries((lucideModule as unknown as { icons: Record<string, IconNode> }).icons),\n);\n\n/**\n * Register additional icons (or override existing ones) by name.\n * Keys may be kebab-case or PascalCase — both are accepted by `ore-icon`.\n */\nexport function registerIcons(icons: Record<string, IconNode>): void {\n for (const [name, node] of Object.entries(icons)) {\n registry.set(name, node);\n }\n}\n\nconst toAttrString = (attrs: Record<string, string | number>): string =>\n Object.entries(attrs)\n .filter(([k]) => ATTR_KEY_RE.test(k) && !BLOCKED_ATTR_RE.test(k))\n .map(\n ([k, v]) =>\n `${k}=\"${String(v).replace(/&/g, '&').replace(/\"/g, '"').replace(/</g, '<').replace(/>/g, '>')}\"`,\n )\n .join(' ');\n\nconst toPascalCase = (value: string): string =>\n value\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .split(/[^a-zA-Z0-9]+/)\n .filter(Boolean)\n .map((p) => p.charAt(0).toUpperCase() + p.slice(1).toLowerCase())\n .join('');\n\nconst parseSize = (value: string | null): number | string => {\n if (value == null || value === '') return DEFAULT_SIZE;\n\n const n = Number(value);\n\n return Number.isFinite(n) && n > 0 && /^\\d+(\\.\\d+)?$/.test(value.trim()) ? n : value;\n};\n\n/** Icon component properties */\nexport type OreIconProps = {\n /** Keep stroke width visually consistent when icon size changes */\n absoluteStrokeWidth?: boolean;\n /** Accessible text label. Decorative icons should omit this. */\n label?: string;\n /** Lucide icon name, e.g. `search` or `chevron-right` */\n name?: string;\n /** Icon width/height in px by default. Accepts CSS lengths. */\n size?: number | string;\n /** Render as a filled/solid shape instead of a stroked outline */\n solid?: boolean;\n /** SVG stroke width */\n strokeWidth?: number;\n};\n\n/**\n * Icon wrapper for consistent Lucide rendering across Block.\n *\n * @element ore-icon\n *\n * @attr {string} name - Lucide icon name, e.g. `search` or `chevron-right`\n * @attr {number|string} size - Width/height (default: 16)\n * @attr {number} stroke-width - SVG stroke width (default: 2)\n * @attr {boolean} absolute-stroke-width - Keep stroke width visually stable across icon sizes\n * @attr {boolean} solid - Render as filled shape instead of stroked outline\n * @attr {string} label - Accessible label; when omitted the icon is decorative\n *\n * @csspart svg - Internal SVG element\n *\n * @example\n * ```html\n * <ore-icon name=\"search\"></ore-icon>\n * <ore-icon name=\"chevron-right\" size=\"18\"></ore-icon>\n * <ore-icon name=\"trash-2\" label=\"Delete\"></ore-icon>\n * <ore-icon name=\"star\" solid></ore-icon>\n * ```\n */\nexport const ICON_TAG = 'ore-icon' as const;\ndefine<OreIconProps>(ICON_TAG, {\n props: {\n absoluteStrokeWidth: prop.bool(),\n label: prop.string(),\n name: prop.string(),\n size: { default: DEFAULT_SIZE as number | string, parse: parseSize, reflect: false },\n solid: prop.bool(),\n strokeWidth: prop.number(DEFAULT_STROKE_WIDTH),\n },\n setup(props) {\n bind({\n attr: {\n 'aria-hidden': () => ((props.label.value ?? '').trim() ? null : 'true'),\n 'aria-label': () => (props.label.value ?? '').trim() || null,\n role: () => ((props.label.value ?? '').trim() ? 'img' : null),\n },\n style: {\n '--_size-px': () => {\n const s = props.size.value;\n\n return typeof s === 'number' ? `${s}px` : String(s);\n },\n },\n });\n\n const markup = computed(() => {\n const name = (props.name.value ?? '').trim();\n\n if (!name) return '';\n\n const iconNode = registry.get(name) ?? registry.get(toPascalCase(name));\n\n if (!iconNode) {\n warn(`ore-icon: icon not found: \"${String(name).slice(0, 64)}\"`);\n\n return '';\n }\n\n const size = props.size.value;\n const numericSize = typeof size === 'number' ? size : LUCIDE_VIEWBOX_SIZE;\n\n const strokeWidth =\n props.absoluteStrokeWidth.value && !props.solid.value\n ? props.strokeWidth.value! * (LUCIDE_VIEWBOX_SIZE / numericSize)\n : props.strokeWidth.value!;\n\n const nodes = iconNode\n .filter(([tag]) => ALLOWED_SVG_TAGS.has(tag))\n .map(([tag, tagAttrs]) => {\n const attrs: Record<string, string | number> = {};\n\n for (const [k, v] of Object.entries(tagAttrs)) {\n if (v !== undefined) attrs[k] = v;\n }\n\n return `<${tag} ${toAttrString(attrs)} />`;\n })\n .join('');\n\n const svgAttrs = toAttrString({\n fill: props.solid.value ? 'currentColor' : 'none',\n part: 'svg',\n stroke: props.solid.value ? 'none' : 'currentColor',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n 'stroke-width': props.solid.value ? 0 : strokeWidth,\n style: `width:100%;height:100%`,\n viewBox: '0 0 24 24',\n xmlns: 'http://www.w3.org/2000/svg',\n });\n\n return `<svg ${svgAttrs}>${nodes}</svg>`;\n });\n\n return html`${raw(markup)}`;\n },\n styles: [styles],\n});\n"],"mappings":"gUAUA,IAAM,EAAe,GACf,EAAuB,EACvB,EAAsB,GAOtB,EAAmB,IAAI,IAAI,CAC/B,SACA,WACA,OACA,UACA,IACA,OACA,iBACA,OACA,OACA,UACA,WACA,iBACA,OACA,OACA,SACA,KACF,CAAC,EAMK,EAAc,4BACd,EAAkB,2BAGlB,EAAW,IAAI,IACnB,OAAO,QAAS,EAAgE,KAAK,CACvF,EAMA,SAAgB,EAAc,EAAuC,CACnE,IAAK,GAAM,CAAC,EAAM,KAAS,OAAO,QAAQ,CAAK,EAC7C,EAAS,IAAI,EAAM,CAAI,CAE3B,CAEA,IAAM,EAAgB,GACpB,OAAO,QAAQ,CAAK,CAAC,CAClB,QAAQ,CAAC,KAAO,EAAY,KAAK,CAAC,GAAK,CAAC,EAAgB,KAAK,CAAC,CAAC,CAAC,CAChE,KACE,CAAC,EAAG,KACH,GAAG,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,QAAQ,KAAM,OAAO,CAAC,CAAC,QAAQ,KAAM,QAAQ,CAAC,CAAC,QAAQ,KAAM,MAAM,CAAC,CAAC,QAAQ,KAAM,MAAM,EAAE,EAClH,CAAC,CACA,KAAK,GAAG,EAEP,EAAgB,GACpB,EACG,QAAQ,qBAAsB,OAAO,CAAC,CACtC,MAAM,eAAe,CAAC,CACtB,OAAO,OAAO,CAAC,CACf,IAAK,GAAM,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,EAAI,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAChE,KAAK,EAAE,EAEN,EAAa,GAA0C,CAC3D,GAAI,GAAS,MAAQ,IAAU,GAAI,OAAO,EAE1C,IAAM,EAAI,OAAO,CAAK,EAEtB,OAAO,OAAO,SAAS,CAAC,GAAK,EAAI,GAAK,gBAAgB,KAAK,EAAM,KAAK,CAAC,EAAI,EAAI,CACjF,EAwCa,EAAW,wBACH,EAAU,CAC7B,MAAO,CACL,oBAAqB,EAAA,KAAK,KAAK,EAC/B,MAAO,EAAA,KAAK,OAAO,EACnB,KAAM,EAAA,KAAK,OAAO,EAClB,KAAM,CAAE,QAAS,EAAiC,MAAO,EAAW,QAAS,EAAM,EACnF,MAAO,EAAA,KAAK,KAAK,EACjB,YAAa,EAAA,KAAK,OAAO,CAAoB,CAC/C,EACA,MAAM,EAAO,CAiEX,OAhEA,EAAA,EAAA,KAAA,CAAK,CACH,KAAM,CACJ,mBAAuB,EAAM,MAAM,OAAS,GAAA,CAAI,KAAK,EAAI,KAAO,OAChE,kBAAqB,EAAM,MAAM,OAAS,GAAA,CAAI,KAAK,GAAK,KACxD,UAAc,EAAM,MAAM,OAAS,GAAA,CAAI,KAAK,EAAI,MAAQ,IAC1D,EACA,MAAO,CACL,iBAAoB,CAClB,IAAM,EAAI,EAAM,KAAK,MAErB,OAAO,OAAO,GAAM,SAAW,GAAG,EAAE,IAAM,OAAO,CAAC,CACpD,CACF,CACF,CAAC,EAmDM,EAAA,IAAI,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,KAjDmB,CAC5B,IAAM,GAAQ,EAAM,KAAK,OAAS,GAAA,CAAI,KAAK,EAE3C,GAAI,CAAC,EAAM,MAAO,GAElB,IAAM,EAAW,EAAS,IAAI,CAAI,GAAK,EAAS,IAAI,EAAa,CAAI,CAAC,EAEtE,GAAI,CAAC,EAGH,OAFA,EAAA,KAAK,8BAA8B,OAAO,CAAI,CAAC,CAAC,MAAM,EAAG,EAAE,EAAE,EAAE,EAExD,GAGT,IAAM,EAAO,EAAM,KAAK,MAClB,EAAc,OAAO,GAAS,SAAW,EAAO,EAEhD,EACJ,EAAM,oBAAoB,OAAS,CAAC,EAAM,MAAM,MAC5C,EAAM,YAAY,OAAU,EAAsB,GAClD,EAAM,YAAY,MAElB,EAAQ,EACX,QAAQ,CAAC,KAAS,EAAiB,IAAI,CAAG,CAAC,CAAC,CAC5C,KAAK,CAAC,EAAK,KAAc,CACxB,IAAM,EAAyC,CAAC,EAEhD,IAAK,GAAM,CAAC,EAAG,KAAM,OAAO,QAAQ,CAAQ,EACtC,IAAM,IAAA,KAAW,EAAM,GAAK,GAGlC,MAAO,IAAI,EAAI,GAAG,EAAa,CAAK,EAAE,IACxC,CAAC,CAAC,CACD,KAAK,EAAE,EAcV,MAAO,QAZU,EAAa,CAC5B,KAAM,EAAM,MAAM,MAAQ,eAAiB,OAC3C,KAAM,MACN,OAAQ,EAAM,MAAM,MAAQ,OAAS,eACrC,iBAAkB,QAClB,kBAAmB,QACnB,eAAgB,EAAM,MAAM,MAAQ,EAAI,EACxC,MAAO,yBACP,QAAS,YACT,MAAO,4BACT,CAEe,EAAS,GAAG,EAAM,OACnC,CAEkB,CAAM,GAC1B,EACA,OAAQ,CAAC,EAAA,OAAM,CACjB,CAAC"}
|
|
1
|
+
{"version":3,"file":"icon.cjs","names":[],"sources":["../src/content/icon/icon.ts"],"sourcesContent":["import { define, html, prop, ref, bind, watchEffect } from '@vielzeug/ore';\nimport { when } from '@vielzeug/ore/directives';\nimport { computed } from '@vielzeug/ripple';\nimport * as lucideModule from 'lucide';\n\nimport { warn } from '../../_dev';\nimport styles from './icon.css?inline';\n\nexport type IconNode = Array<[string, Record<string, string | number | undefined>]>;\n\nconst DEFAULT_SIZE = 16;\nconst DEFAULT_STROKE_WIDTH = 2;\nconst LUCIDE_VIEWBOX_SIZE = 24;\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\n/**\n * Allowlisted SVG shape/structure element names. Only these tags are permitted\n * when building the SVG DOM from an IconNode, preventing arbitrary element\n * injection (e.g. <script>, event-handler-bearing elements).\n */\nconst ALLOWED_SVG_TAGS = new Set([\n 'circle',\n 'clipPath',\n 'defs',\n 'ellipse',\n 'g',\n 'line',\n 'linearGradient',\n 'mask',\n 'path',\n 'polygon',\n 'polyline',\n 'radialGradient',\n 'rect',\n 'stop',\n 'symbol',\n 'use',\n]);\n\n/**\n * Allowlisted SVG presentation / structural attribute names.\n * Event handler attributes (on*) and \"xlink:href\" are excluded.\n */\nconst ATTR_KEY_RE = /^[a-zA-Z][a-zA-Z0-9:_-]*$/;\nconst BLOCKED_ATTR_RE = /^(on|xlink:|xml:|href$)/i;\n\n// Sync registry seeded from lucide at module load; extend at any time via registerIcons()\nconst registry = new Map<string, IconNode>(\n Object.entries((lucideModule as unknown as { icons: Record<string, IconNode> }).icons),\n);\n\n/**\n * Register additional icons (or override existing ones) by name.\n * Keys may be kebab-case or PascalCase — both are accepted by `ore-icon`.\n */\nexport function registerIcons(icons: Record<string, IconNode>): void {\n for (const [name, node] of Object.entries(icons)) {\n registry.set(name, node);\n }\n}\n\nconst toPascalCase = (value: string): string =>\n value\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .split(/[^a-zA-Z0-9]+/)\n .filter(Boolean)\n .map((p) => p.charAt(0).toUpperCase() + p.slice(1).toLowerCase())\n .join('');\n\nconst parseSize = (value: string | null): number | string => {\n if (value == null || value === '') return DEFAULT_SIZE;\n\n const n = Number(value);\n\n return Number.isFinite(n) && n > 0 && /^\\d+(\\.\\d+)?$/.test(value.trim()) ? n : value;\n};\n\nconst resolveIcon = (name: string): IconNode | undefined => registry.get(name) ?? registry.get(toPascalCase(name));\n\n/**\n * Builds an allowlisted SVG child element via `createElementNS` — real DOM construction, not\n * HTML-string parsing, so this never touches ore's `raw()` directive (and its \"unsanitized\n * HTML\" dev warning) at all. `iconNode` entries come from the bundled Lucide icon set or\n * `registerIcons()` (a developer/build-time API, never runtime user input), but the tag/attr\n * allowlist stays as defense in depth regardless of where the data originated.\n */\nconst createSvgChild = (tag: string, attrs: Record<string, string | number | undefined>): SVGElement | null => {\n if (!ALLOWED_SVG_TAGS.has(tag)) return null;\n\n const el = document.createElementNS(SVG_NS, tag);\n\n for (const [key, value] of Object.entries(attrs)) {\n if (value === undefined) continue;\n\n if (!ATTR_KEY_RE.test(key) || BLOCKED_ATTR_RE.test(key)) continue;\n\n el.setAttribute(key, String(value));\n }\n\n return el;\n};\n\n/** Icon component properties */\nexport type OreIconProps = {\n /** Keep stroke width visually consistent when icon size changes */\n absoluteStrokeWidth?: boolean;\n /** Accessible text label. Decorative icons should omit this. */\n label?: string;\n /** Lucide icon name, e.g. `search` or `chevron-right` */\n name?: string;\n /** Icon width/height in px by default. Accepts CSS lengths. */\n size?: number | string;\n /** Render as a filled/solid shape instead of a stroked outline */\n solid?: boolean;\n /** SVG stroke width */\n strokeWidth?: number;\n};\n\n/**\n * Icon wrapper for consistent Lucide rendering across Block.\n *\n * @element ore-icon\n *\n * @attr {string} name - Lucide icon name, e.g. `search` or `chevron-right`\n * @attr {number|string} size - Width/height (default: 16)\n * @attr {number} stroke-width - SVG stroke width (default: 2)\n * @attr {boolean} absolute-stroke-width - Keep stroke width visually stable across icon sizes\n * @attr {boolean} solid - Render as filled shape instead of stroked outline\n * @attr {string} label - Accessible label; when omitted the icon is decorative\n *\n * @csspart svg - Internal SVG element\n *\n * @example\n * ```html\n * <ore-icon name=\"search\"></ore-icon>\n * <ore-icon name=\"chevron-right\" size=\"18\"></ore-icon>\n * <ore-icon name=\"trash-2\" label=\"Delete\"></ore-icon>\n * <ore-icon name=\"star\" solid></ore-icon>\n * ```\n */\nexport const ICON_TAG = 'ore-icon' as const;\ndefine<OreIconProps>(ICON_TAG, {\n props: {\n absoluteStrokeWidth: prop.bool(),\n label: prop.string(),\n name: prop.string(),\n size: { default: DEFAULT_SIZE as number | string, parse: parseSize, reflect: false },\n solid: prop.bool(),\n strokeWidth: prop.number(DEFAULT_STROKE_WIDTH),\n },\n setup(props) {\n bind({\n attr: {\n 'aria-hidden': () => ((props.label.value ?? '').trim() ? null : 'true'),\n 'aria-label': () => (props.label.value ?? '').trim() || null,\n role: () => ((props.label.value ?? '').trim() ? 'img' : null),\n },\n style: {\n '--_size-px': () => {\n const s = props.size.value;\n\n return typeof s === 'number' ? `${s}px` : String(s);\n },\n },\n });\n\n const svgRef = ref<SVGSVGElement>();\n\n // Memoized so an unknown icon name only warns once per change, not once per reactive read.\n const iconNode = computed(() => {\n const name = (props.name.value ?? '').trim();\n\n if (!name) return undefined;\n\n const node = resolveIcon(name);\n\n if (!node) warn(`ore-icon: icon not found: \"${name.slice(0, 64)}\"`);\n\n return node;\n });\n\n // Real DOM construction (createElementNS), not the raw() directive — see createSvgChild's\n // doc comment. Rebuilds the <svg>'s attributes and children whenever the icon name, size,\n // or presentation props change, or when `svgRef` first attaches (a fresh element mounts\n // every time `when()`'s branch below flips truthy).\n watchEffect(() => {\n const svg = svgRef.value;\n const node = iconNode.value;\n\n if (!svg || !node) return;\n\n const size = props.size.value;\n const numericSize = typeof size === 'number' ? size : LUCIDE_VIEWBOX_SIZE;\n const strokeWidth =\n props.absoluteStrokeWidth.value && !props.solid.value\n ? props.strokeWidth.value! * (LUCIDE_VIEWBOX_SIZE / numericSize)\n : props.strokeWidth.value!;\n\n svg.setAttribute('fill', props.solid.value ? 'currentColor' : 'none');\n svg.setAttribute('stroke', props.solid.value ? 'none' : 'currentColor');\n svg.setAttribute('stroke-linecap', 'round');\n svg.setAttribute('stroke-linejoin', 'round');\n svg.setAttribute('stroke-width', String(props.solid.value ? 0 : strokeWidth));\n svg.setAttribute('viewBox', '0 0 24 24');\n\n const children = node.map(([tag, attrs]) => createSvgChild(tag, attrs)).filter((el): el is SVGElement => !!el);\n\n svg.replaceChildren(...children);\n });\n\n return html`${when(\n () => !!iconNode.value,\n () => html`<svg ref=\"${svgRef}\" part=\"svg\" style=\"width:100%;height:100%\"></svg>`,\n )}`;\n },\n styles: [styles],\n});\n"],"mappings":"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"}
|
package/dist/icon.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { warn as e } from "./_dev.js";
|
|
2
2
|
import t from "./content/icon/icon.css.js";
|
|
3
|
-
import { bind as n, define as r, html as i, prop as a } from "@vielzeug/ore";
|
|
4
|
-
import {
|
|
5
|
-
import { computed as
|
|
6
|
-
import * as
|
|
3
|
+
import { bind as n, define as r, html as i, prop as a, ref as o, watchEffect as s } from "@vielzeug/ore";
|
|
4
|
+
import { when as c } from "@vielzeug/ore/directives";
|
|
5
|
+
import { computed as l } from "@vielzeug/ripple";
|
|
6
|
+
import * as u from "lucide";
|
|
7
7
|
//#region src/content/icon/icon.ts
|
|
8
|
-
var
|
|
8
|
+
var d = 16, f = 2, p = 24, m = "http://www.w3.org/2000/svg", h = /* @__PURE__ */ new Set([
|
|
9
9
|
"circle",
|
|
10
10
|
"clipPath",
|
|
11
11
|
"defs",
|
|
@@ -22,30 +22,35 @@ var l = 16, u = 2, d = 24, f = /* @__PURE__ */ new Set([
|
|
|
22
22
|
"stop",
|
|
23
23
|
"symbol",
|
|
24
24
|
"use"
|
|
25
|
-
]),
|
|
26
|
-
function
|
|
27
|
-
for (let [t, n] of Object.entries(e))
|
|
25
|
+
]), g = /^[a-zA-Z][a-zA-Z0-9:_-]*$/, _ = /^(on|xlink:|xml:|href$)/i, v = new Map(Object.entries(u.icons));
|
|
26
|
+
function y(e) {
|
|
27
|
+
for (let [t, n] of Object.entries(e)) v.set(t, n);
|
|
28
28
|
}
|
|
29
|
-
var
|
|
30
|
-
if (e == null || e === "") return
|
|
29
|
+
var b = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").split(/[^a-zA-Z0-9]+/).filter(Boolean).map((e) => e.charAt(0).toUpperCase() + e.slice(1).toLowerCase()).join(""), x = (e) => {
|
|
30
|
+
if (e == null || e === "") return d;
|
|
31
31
|
let t = Number(e);
|
|
32
32
|
return Number.isFinite(t) && t > 0 && /^\d+(\.\d+)?$/.test(e.trim()) ? t : e;
|
|
33
|
-
}, b =
|
|
34
|
-
|
|
33
|
+
}, S = (e) => v.get(e) ?? v.get(b(e)), C = (e, t) => {
|
|
34
|
+
if (!h.has(e)) return null;
|
|
35
|
+
let n = document.createElementNS(m, e);
|
|
36
|
+
for (let [e, r] of Object.entries(t)) r !== void 0 && (!g.test(e) || _.test(e) || n.setAttribute(e, String(r)));
|
|
37
|
+
return n;
|
|
38
|
+
}, w = "ore-icon";
|
|
39
|
+
r(w, {
|
|
35
40
|
props: {
|
|
36
41
|
absoluteStrokeWidth: a.bool(),
|
|
37
42
|
label: a.string(),
|
|
38
43
|
name: a.string(),
|
|
39
44
|
size: {
|
|
40
|
-
default:
|
|
41
|
-
parse:
|
|
45
|
+
default: d,
|
|
46
|
+
parse: x,
|
|
42
47
|
reflect: !1
|
|
43
48
|
},
|
|
44
49
|
solid: a.bool(),
|
|
45
|
-
strokeWidth: a.number(
|
|
50
|
+
strokeWidth: a.number(f)
|
|
46
51
|
},
|
|
47
52
|
setup(t) {
|
|
48
|
-
|
|
53
|
+
n({
|
|
49
54
|
attr: {
|
|
50
55
|
"aria-hidden": () => (t.label.value ?? "").trim() ? null : "true",
|
|
51
56
|
"aria-label": () => (t.label.value ?? "").trim() || null,
|
|
@@ -55,32 +60,25 @@ r(b, {
|
|
|
55
60
|
let e = t.size.value;
|
|
56
61
|
return typeof e == "number" ? `${e}px` : String(e);
|
|
57
62
|
} }
|
|
58
|
-
})
|
|
63
|
+
});
|
|
64
|
+
let r = o(), a = l(() => {
|
|
59
65
|
let n = (t.name.value ?? "").trim();
|
|
60
|
-
if (!n) return
|
|
61
|
-
let r =
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
"stroke-linecap": "round",
|
|
73
|
-
"stroke-linejoin": "round",
|
|
74
|
-
"stroke-width": t.solid.value ? 0 : o,
|
|
75
|
-
style: "width:100%;height:100%",
|
|
76
|
-
viewBox: "0 0 24 24",
|
|
77
|
-
xmlns: "http://www.w3.org/2000/svg"
|
|
78
|
-
})}>${s}</svg>`;
|
|
79
|
-
}))}`;
|
|
66
|
+
if (!n) return;
|
|
67
|
+
let r = S(n);
|
|
68
|
+
return r || e(`ore-icon: icon not found: "${n.slice(0, 64)}"`), r;
|
|
69
|
+
});
|
|
70
|
+
return s(() => {
|
|
71
|
+
let e = r.value, n = a.value;
|
|
72
|
+
if (!e || !n) return;
|
|
73
|
+
let i = t.size.value, o = typeof i == "number" ? i : p, s = t.absoluteStrokeWidth.value && !t.solid.value ? t.strokeWidth.value * (p / o) : t.strokeWidth.value;
|
|
74
|
+
e.setAttribute("fill", t.solid.value ? "currentColor" : "none"), e.setAttribute("stroke", t.solid.value ? "none" : "currentColor"), e.setAttribute("stroke-linecap", "round"), e.setAttribute("stroke-linejoin", "round"), e.setAttribute("stroke-width", String(t.solid.value ? 0 : s)), e.setAttribute("viewBox", "0 0 24 24");
|
|
75
|
+
let c = n.map(([e, t]) => C(e, t)).filter((e) => !!e);
|
|
76
|
+
e.replaceChildren(...c);
|
|
77
|
+
}), i`${c(() => !!a.value, () => i`<svg ref="${r}" part="svg" style="width:100%;height:100%"></svg>`)}`;
|
|
80
78
|
},
|
|
81
79
|
styles: [t]
|
|
82
80
|
});
|
|
83
81
|
//#endregion
|
|
84
|
-
export {
|
|
82
|
+
export { w as ICON_TAG, y as registerIcons };
|
|
85
83
|
|
|
86
84
|
//# sourceMappingURL=icon.js.map
|
package/dist/icon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icon.js","names":[],"sources":["../src/content/icon/icon.ts"],"sourcesContent":["import { define, html, prop, bind } from '@vielzeug/ore';\nimport { raw } from '@vielzeug/ore/directives';\nimport { computed } from '@vielzeug/ripple';\nimport * as lucideModule from 'lucide';\n\nimport { warn } from '../../_dev';\nimport styles from './icon.css?inline';\n\nexport type IconNode = Array<[string, Record<string, string | number | undefined>]>;\n\nconst DEFAULT_SIZE = 16;\nconst DEFAULT_STROKE_WIDTH = 2;\nconst LUCIDE_VIEWBOX_SIZE = 24;\n\n/**\n * Allowlisted SVG shape/structure element names. Only these tags are permitted\n * when building the SVG markup from an IconNode, preventing arbitrary element\n * injection (e.g. <script>, event-handler-bearing elements).\n */\nconst ALLOWED_SVG_TAGS = new Set([\n 'circle',\n 'clipPath',\n 'defs',\n 'ellipse',\n 'g',\n 'line',\n 'linearGradient',\n 'mask',\n 'path',\n 'polygon',\n 'polyline',\n 'radialGradient',\n 'rect',\n 'stop',\n 'symbol',\n 'use',\n]);\n\n/**\n * Allowlisted SVG presentation / structural attribute names.\n * Event handler attributes (on*) and \"xlink:href\" are excluded.\n */\nconst ATTR_KEY_RE = /^[a-zA-Z][a-zA-Z0-9:_-]*$/;\nconst BLOCKED_ATTR_RE = /^(on|xlink:|xml:|href$)/i;\n\n// Sync registry seeded from lucide at module load; extend at any time via registerIcons()\nconst registry = new Map<string, IconNode>(\n Object.entries((lucideModule as unknown as { icons: Record<string, IconNode> }).icons),\n);\n\n/**\n * Register additional icons (or override existing ones) by name.\n * Keys may be kebab-case or PascalCase — both are accepted by `ore-icon`.\n */\nexport function registerIcons(icons: Record<string, IconNode>): void {\n for (const [name, node] of Object.entries(icons)) {\n registry.set(name, node);\n }\n}\n\nconst toAttrString = (attrs: Record<string, string | number>): string =>\n Object.entries(attrs)\n .filter(([k]) => ATTR_KEY_RE.test(k) && !BLOCKED_ATTR_RE.test(k))\n .map(\n ([k, v]) =>\n `${k}=\"${String(v).replace(/&/g, '&').replace(/\"/g, '"').replace(/</g, '<').replace(/>/g, '>')}\"`,\n )\n .join(' ');\n\nconst toPascalCase = (value: string): string =>\n value\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .split(/[^a-zA-Z0-9]+/)\n .filter(Boolean)\n .map((p) => p.charAt(0).toUpperCase() + p.slice(1).toLowerCase())\n .join('');\n\nconst parseSize = (value: string | null): number | string => {\n if (value == null || value === '') return DEFAULT_SIZE;\n\n const n = Number(value);\n\n return Number.isFinite(n) && n > 0 && /^\\d+(\\.\\d+)?$/.test(value.trim()) ? n : value;\n};\n\n/** Icon component properties */\nexport type OreIconProps = {\n /** Keep stroke width visually consistent when icon size changes */\n absoluteStrokeWidth?: boolean;\n /** Accessible text label. Decorative icons should omit this. */\n label?: string;\n /** Lucide icon name, e.g. `search` or `chevron-right` */\n name?: string;\n /** Icon width/height in px by default. Accepts CSS lengths. */\n size?: number | string;\n /** Render as a filled/solid shape instead of a stroked outline */\n solid?: boolean;\n /** SVG stroke width */\n strokeWidth?: number;\n};\n\n/**\n * Icon wrapper for consistent Lucide rendering across Block.\n *\n * @element ore-icon\n *\n * @attr {string} name - Lucide icon name, e.g. `search` or `chevron-right`\n * @attr {number|string} size - Width/height (default: 16)\n * @attr {number} stroke-width - SVG stroke width (default: 2)\n * @attr {boolean} absolute-stroke-width - Keep stroke width visually stable across icon sizes\n * @attr {boolean} solid - Render as filled shape instead of stroked outline\n * @attr {string} label - Accessible label; when omitted the icon is decorative\n *\n * @csspart svg - Internal SVG element\n *\n * @example\n * ```html\n * <ore-icon name=\"search\"></ore-icon>\n * <ore-icon name=\"chevron-right\" size=\"18\"></ore-icon>\n * <ore-icon name=\"trash-2\" label=\"Delete\"></ore-icon>\n * <ore-icon name=\"star\" solid></ore-icon>\n * ```\n */\nexport const ICON_TAG = 'ore-icon' as const;\ndefine<OreIconProps>(ICON_TAG, {\n props: {\n absoluteStrokeWidth: prop.bool(),\n label: prop.string(),\n name: prop.string(),\n size: { default: DEFAULT_SIZE as number | string, parse: parseSize, reflect: false },\n solid: prop.bool(),\n strokeWidth: prop.number(DEFAULT_STROKE_WIDTH),\n },\n setup(props) {\n bind({\n attr: {\n 'aria-hidden': () => ((props.label.value ?? '').trim() ? null : 'true'),\n 'aria-label': () => (props.label.value ?? '').trim() || null,\n role: () => ((props.label.value ?? '').trim() ? 'img' : null),\n },\n style: {\n '--_size-px': () => {\n const s = props.size.value;\n\n return typeof s === 'number' ? `${s}px` : String(s);\n },\n },\n });\n\n const markup = computed(() => {\n const name = (props.name.value ?? '').trim();\n\n if (!name) return '';\n\n const iconNode = registry.get(name) ?? registry.get(toPascalCase(name));\n\n if (!iconNode) {\n warn(`ore-icon: icon not found: \"${String(name).slice(0, 64)}\"`);\n\n return '';\n }\n\n const size = props.size.value;\n const numericSize = typeof size === 'number' ? size : LUCIDE_VIEWBOX_SIZE;\n\n const strokeWidth =\n props.absoluteStrokeWidth.value && !props.solid.value\n ? props.strokeWidth.value! * (LUCIDE_VIEWBOX_SIZE / numericSize)\n : props.strokeWidth.value!;\n\n const nodes = iconNode\n .filter(([tag]) => ALLOWED_SVG_TAGS.has(tag))\n .map(([tag, tagAttrs]) => {\n const attrs: Record<string, string | number> = {};\n\n for (const [k, v] of Object.entries(tagAttrs)) {\n if (v !== undefined) attrs[k] = v;\n }\n\n return `<${tag} ${toAttrString(attrs)} />`;\n })\n .join('');\n\n const svgAttrs = toAttrString({\n fill: props.solid.value ? 'currentColor' : 'none',\n part: 'svg',\n stroke: props.solid.value ? 'none' : 'currentColor',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n 'stroke-width': props.solid.value ? 0 : strokeWidth,\n style: `width:100%;height:100%`,\n viewBox: '0 0 24 24',\n xmlns: 'http://www.w3.org/2000/svg',\n });\n\n return `<svg ${svgAttrs}>${nodes}</svg>`;\n });\n\n return html`${raw(markup)}`;\n },\n styles: [styles],\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"icon.js","names":[],"sources":["../src/content/icon/icon.ts"],"sourcesContent":["import { define, html, prop, ref, bind, watchEffect } from '@vielzeug/ore';\nimport { when } from '@vielzeug/ore/directives';\nimport { computed } from '@vielzeug/ripple';\nimport * as lucideModule from 'lucide';\n\nimport { warn } from '../../_dev';\nimport styles from './icon.css?inline';\n\nexport type IconNode = Array<[string, Record<string, string | number | undefined>]>;\n\nconst DEFAULT_SIZE = 16;\nconst DEFAULT_STROKE_WIDTH = 2;\nconst LUCIDE_VIEWBOX_SIZE = 24;\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\n/**\n * Allowlisted SVG shape/structure element names. Only these tags are permitted\n * when building the SVG DOM from an IconNode, preventing arbitrary element\n * injection (e.g. <script>, event-handler-bearing elements).\n */\nconst ALLOWED_SVG_TAGS = new Set([\n 'circle',\n 'clipPath',\n 'defs',\n 'ellipse',\n 'g',\n 'line',\n 'linearGradient',\n 'mask',\n 'path',\n 'polygon',\n 'polyline',\n 'radialGradient',\n 'rect',\n 'stop',\n 'symbol',\n 'use',\n]);\n\n/**\n * Allowlisted SVG presentation / structural attribute names.\n * Event handler attributes (on*) and \"xlink:href\" are excluded.\n */\nconst ATTR_KEY_RE = /^[a-zA-Z][a-zA-Z0-9:_-]*$/;\nconst BLOCKED_ATTR_RE = /^(on|xlink:|xml:|href$)/i;\n\n// Sync registry seeded from lucide at module load; extend at any time via registerIcons()\nconst registry = new Map<string, IconNode>(\n Object.entries((lucideModule as unknown as { icons: Record<string, IconNode> }).icons),\n);\n\n/**\n * Register additional icons (or override existing ones) by name.\n * Keys may be kebab-case or PascalCase — both are accepted by `ore-icon`.\n */\nexport function registerIcons(icons: Record<string, IconNode>): void {\n for (const [name, node] of Object.entries(icons)) {\n registry.set(name, node);\n }\n}\n\nconst toPascalCase = (value: string): string =>\n value\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .split(/[^a-zA-Z0-9]+/)\n .filter(Boolean)\n .map((p) => p.charAt(0).toUpperCase() + p.slice(1).toLowerCase())\n .join('');\n\nconst parseSize = (value: string | null): number | string => {\n if (value == null || value === '') return DEFAULT_SIZE;\n\n const n = Number(value);\n\n return Number.isFinite(n) && n > 0 && /^\\d+(\\.\\d+)?$/.test(value.trim()) ? n : value;\n};\n\nconst resolveIcon = (name: string): IconNode | undefined => registry.get(name) ?? registry.get(toPascalCase(name));\n\n/**\n * Builds an allowlisted SVG child element via `createElementNS` — real DOM construction, not\n * HTML-string parsing, so this never touches ore's `raw()` directive (and its \"unsanitized\n * HTML\" dev warning) at all. `iconNode` entries come from the bundled Lucide icon set or\n * `registerIcons()` (a developer/build-time API, never runtime user input), but the tag/attr\n * allowlist stays as defense in depth regardless of where the data originated.\n */\nconst createSvgChild = (tag: string, attrs: Record<string, string | number | undefined>): SVGElement | null => {\n if (!ALLOWED_SVG_TAGS.has(tag)) return null;\n\n const el = document.createElementNS(SVG_NS, tag);\n\n for (const [key, value] of Object.entries(attrs)) {\n if (value === undefined) continue;\n\n if (!ATTR_KEY_RE.test(key) || BLOCKED_ATTR_RE.test(key)) continue;\n\n el.setAttribute(key, String(value));\n }\n\n return el;\n};\n\n/** Icon component properties */\nexport type OreIconProps = {\n /** Keep stroke width visually consistent when icon size changes */\n absoluteStrokeWidth?: boolean;\n /** Accessible text label. Decorative icons should omit this. */\n label?: string;\n /** Lucide icon name, e.g. `search` or `chevron-right` */\n name?: string;\n /** Icon width/height in px by default. Accepts CSS lengths. */\n size?: number | string;\n /** Render as a filled/solid shape instead of a stroked outline */\n solid?: boolean;\n /** SVG stroke width */\n strokeWidth?: number;\n};\n\n/**\n * Icon wrapper for consistent Lucide rendering across Block.\n *\n * @element ore-icon\n *\n * @attr {string} name - Lucide icon name, e.g. `search` or `chevron-right`\n * @attr {number|string} size - Width/height (default: 16)\n * @attr {number} stroke-width - SVG stroke width (default: 2)\n * @attr {boolean} absolute-stroke-width - Keep stroke width visually stable across icon sizes\n * @attr {boolean} solid - Render as filled shape instead of stroked outline\n * @attr {string} label - Accessible label; when omitted the icon is decorative\n *\n * @csspart svg - Internal SVG element\n *\n * @example\n * ```html\n * <ore-icon name=\"search\"></ore-icon>\n * <ore-icon name=\"chevron-right\" size=\"18\"></ore-icon>\n * <ore-icon name=\"trash-2\" label=\"Delete\"></ore-icon>\n * <ore-icon name=\"star\" solid></ore-icon>\n * ```\n */\nexport const ICON_TAG = 'ore-icon' as const;\ndefine<OreIconProps>(ICON_TAG, {\n props: {\n absoluteStrokeWidth: prop.bool(),\n label: prop.string(),\n name: prop.string(),\n size: { default: DEFAULT_SIZE as number | string, parse: parseSize, reflect: false },\n solid: prop.bool(),\n strokeWidth: prop.number(DEFAULT_STROKE_WIDTH),\n },\n setup(props) {\n bind({\n attr: {\n 'aria-hidden': () => ((props.label.value ?? '').trim() ? null : 'true'),\n 'aria-label': () => (props.label.value ?? '').trim() || null,\n role: () => ((props.label.value ?? '').trim() ? 'img' : null),\n },\n style: {\n '--_size-px': () => {\n const s = props.size.value;\n\n return typeof s === 'number' ? `${s}px` : String(s);\n },\n },\n });\n\n const svgRef = ref<SVGSVGElement>();\n\n // Memoized so an unknown icon name only warns once per change, not once per reactive read.\n const iconNode = computed(() => {\n const name = (props.name.value ?? '').trim();\n\n if (!name) return undefined;\n\n const node = resolveIcon(name);\n\n if (!node) warn(`ore-icon: icon not found: \"${name.slice(0, 64)}\"`);\n\n return node;\n });\n\n // Real DOM construction (createElementNS), not the raw() directive — see createSvgChild's\n // doc comment. Rebuilds the <svg>'s attributes and children whenever the icon name, size,\n // or presentation props change, or when `svgRef` first attaches (a fresh element mounts\n // every time `when()`'s branch below flips truthy).\n watchEffect(() => {\n const svg = svgRef.value;\n const node = iconNode.value;\n\n if (!svg || !node) return;\n\n const size = props.size.value;\n const numericSize = typeof size === 'number' ? size : LUCIDE_VIEWBOX_SIZE;\n const strokeWidth =\n props.absoluteStrokeWidth.value && !props.solid.value\n ? props.strokeWidth.value! * (LUCIDE_VIEWBOX_SIZE / numericSize)\n : props.strokeWidth.value!;\n\n svg.setAttribute('fill', props.solid.value ? 'currentColor' : 'none');\n svg.setAttribute('stroke', props.solid.value ? 'none' : 'currentColor');\n svg.setAttribute('stroke-linecap', 'round');\n svg.setAttribute('stroke-linejoin', 'round');\n svg.setAttribute('stroke-width', String(props.solid.value ? 0 : strokeWidth));\n svg.setAttribute('viewBox', '0 0 24 24');\n\n const children = node.map(([tag, attrs]) => createSvgChild(tag, attrs)).filter((el): el is SVGElement => !!el);\n\n svg.replaceChildren(...children);\n });\n\n return html`${when(\n () => !!iconNode.value,\n () => html`<svg ref=\"${svgRef}\" part=\"svg\" style=\"width:100%;height:100%\"></svg>`,\n )}`;\n },\n styles: [styles],\n});\n"],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./code-window.cjs"),t=require("./icon.cjs"),n=require("./copy-command.cjs"),r=require("./shared/prop-bundles.cjs"),i=require("./shared/size-presets.cjs"),a=require("./progress.cjs"),o=require("./errors.cjs"),
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./code-window.cjs"),t=require("./icon.cjs"),n=require("./copy-command.cjs"),r=require("./shared/prop-bundles.cjs"),i=require("./shared/size-presets.cjs"),a=require("./progress.cjs"),o=require("./errors.cjs"),s=require("./content/carousel/carousel-slide.cjs"),ee=require("./carousel.cjs"),c=require("./avatar.cjs"),l=require("./breadcrumb.cjs"),u=require("./card.cjs"),d=require("./chat-message.cjs"),f=require("./list.cjs"),te=require("./list-item.cjs"),p=require("./button-group.cjs"),ne=require("./inputs/shared/form-context.cjs"),re=require("./button.cjs"),m=require("./pagination.cjs"),h=require("./separator.cjs"),g=require("./table.cjs"),_=require("./text.cjs"),v=require("./accordion.cjs"),y=require("./tabs.cjs"),b=require("./accordion-item.cjs"),x=require("./tab-item.cjs"),S=require("./tab-panel.cjs"),C=require("./async.cjs"),w=require("./alert.cjs"),T=require("./badge.cjs"),E=require("./chip.cjs"),D=require("./password-strength.cjs"),O=require("./skeleton.cjs"),k=require("./typing-indicator.cjs"),A=require("./toast.cjs"),j=require("./checkbox-group.cjs"),M=require("./checkbox.cjs"),N=require("./input.cjs"),P=require("./combobox.cjs"),F=require("./select.cjs"),I=require("./popover.cjs"),L=require("./datagrid.cjs"),ie=require("./calendar.cjs"),R=require("./date-picker.cjs"),z=require("./file-input.cjs"),B=require("./form.cjs"),V=require("./message-composer.cjs"),H=require("./number-input.cjs"),U=require("./otp-input.cjs"),W=require("./radio-group.cjs"),G=require("./radio.cjs"),K=require("./rating.cjs"),q=require("./slider.cjs"),J=require("./switch.cjs"),Y=require("./textarea.cjs"),ae=require("./time-picker.cjs"),oe=require("./box.cjs"),se=require("./grid-item.cjs"),ce=require("./grid.cjs"),X=require("./navbar.cjs"),Z=require("./sidebar.cjs"),Q=require("./command-palette.cjs"),le=require("./dialog.cjs"),ue=require("./drawer.cjs"),$=require("./menu.cjs"),de=require("./tooltip.cjs");exports.ACCORDION_CTX=v.ACCORDION_CTX,exports.ACCORDION_ITEM_TAG=b.ACCORDION_ITEM_TAG,exports.ACCORDION_TAG=v.ACCORDION_TAG,exports.ALERT_TAG=w.ALERT_TAG,exports.ASYNC_TAG=C.ASYNC_TAG,exports.AVATAR_GROUP_TAG=c.AVATAR_GROUP_TAG,exports.AVATAR_TAG=c.AVATAR_TAG,exports.BADGE_TAG=T.BADGE_TAG,exports.BOX_TAG=oe.BOX_TAG,exports.BREADCRUMB_ITEM_TAG=l.BREADCRUMB_ITEM_TAG,exports.BREADCRUMB_TAG=l.BREADCRUMB_TAG,exports.BUTTON_GROUP_CTX=p.BUTTON_GROUP_CTX,exports.BUTTON_GROUP_TAG=p.BUTTON_GROUP_TAG,exports.BUTTON_TAG=re.BUTTON_TAG,exports.CALENDAR_TAG=ie.CALENDAR_TAG,exports.CARD_TAG=u.CARD_TAG,exports.CAROUSEL_SLIDE_TAG=s.CAROUSEL_SLIDE_TAG,exports.CAROUSEL_TAG=ee.CAROUSEL_TAG,exports.CHAT_MESSAGE_TAG=d.CHAT_MESSAGE_TAG,exports.CHECKBOX_GROUP_CTX=j.CHECKBOX_GROUP_CTX,exports.CHECKBOX_GROUP_TAG=j.CHECKBOX_GROUP_TAG,exports.CHECKBOX_TAG=M.CHECKBOX_TAG,exports.CHIP_TAG=E.CHIP_TAG,exports.CODE_WINDOW_TAG=e.CODE_WINDOW_TAG,exports.COMBOBOX_TAG=P.COMBOBOX_TAG,exports.COMMAND_PALETTE_ITEM_TAG=Q.COMMAND_PALETTE_ITEM_TAG,exports.COMMAND_PALETTE_TAG=Q.COMMAND_PALETTE_TAG,exports.CONTROL_SIZE_PRESET=i.CONTROL_SIZE_PRESET,exports.COPY_COMMAND_TAG=n.COPY_COMMAND_TAG,exports.DATAGRID_TAG=L.DATAGRID_TAG,exports.DATE_PICKER_TAG=R.DATE_PICKER_TAG,exports.DIALOG_TAG=le.DIALOG_TAG,exports.DRAWER_TAG=ue.DRAWER_TAG,exports.FIELD_SIZE_PRESET=i.FIELD_SIZE_PRESET,exports.FILE_INPUT_SIZE_PRESET=i.FILE_INPUT_SIZE_PRESET,exports.FILE_INPUT_TAG=z.FILE_INPUT_TAG,exports.FORM_CTX=ne.FORM_CTX,exports.FORM_TAG=B.FORM_TAG,exports.GRID_ITEM_TAG=se.GRID_ITEM_TAG,exports.GRID_TAG=ce.GRID_TAG,exports.ICON_TAG=t.ICON_TAG,exports.INPUT_TAG=N.INPUT_TAG,exports.LIST_CTX=f.LIST_CTX,exports.LIST_ITEM_TAG=te.LIST_ITEM_TAG,exports.LIST_SIZE_PRESET=i.LIST_SIZE_PRESET,exports.LIST_TAG=f.LIST_TAG,exports.MENU_ITEM_TAG=$.MENU_ITEM_TAG,exports.MENU_SIZE_PRESET=i.MENU_SIZE_PRESET,exports.MENU_TAG=$.MENU_TAG,exports.MESSAGE_COMPOSER_SIZE_PRESET=i.MESSAGE_COMPOSER_SIZE_PRESET,exports.MESSAGE_COMPOSER_TAG=V.MESSAGE_COMPOSER_TAG,exports.NAVBAR_CTX=X.NAVBAR_CTX,exports.NAVBAR_ITEM_TAG=X.NAVBAR_ITEM_TAG,exports.NAVBAR_TAG=X.NAVBAR_TAG,exports.NUMBER_INPUT_TAG=H.NUMBER_INPUT_TAG,exports.OTP_INPUT_TAG=U.OTP_INPUT_TAG,exports.PAGINATION_TAG=m.PAGINATION_TAG,exports.PASSWORD_STRENGTH_TAG=D.PASSWORD_STRENGTH_TAG,exports.POPOVER_TAG=I.POPOVER_TAG,exports.PROGRESS_TAG=a.PROGRESS_TAG,exports.RADIO_GROUP_CTX=W.RADIO_GROUP_CTX,exports.RADIO_GROUP_TAG=W.RADIO_GROUP_TAG,exports.RADIO_TAG=G.RADIO_TAG,exports.RATING_TAG=K.RATING_TAG,exports.RefineConfigError=o.RefineConfigError,exports.RefineError=o.RefineError,exports.SELECT_TAG=F.SELECT_TAG,exports.SEPARATOR_TAG=h.SEPARATOR_TAG,exports.SIDEBAR_CTX=Z.SIDEBAR_CTX,exports.SIDEBAR_GROUP_TAG=Z.SIDEBAR_GROUP_TAG,exports.SIDEBAR_ITEM_TAG=Z.SIDEBAR_ITEM_TAG,exports.SIDEBAR_TAG=Z.SIDEBAR_TAG,exports.SKELETON_TAG=O.SKELETON_TAG,exports.SLIDER_SIZE_PRESET=i.SLIDER_SIZE_PRESET,exports.SLIDER_TAG=q.SLIDER_TAG,exports.SWITCH_SIZE_PRESET=i.SWITCH_SIZE_PRESET,exports.SWITCH_TAG=J.SWITCH_TAG,exports.TABLE_TAG=g.TABLE_TAG,exports.TABS_CTX=y.TABS_CTX,exports.TABS_TAG=y.TABS_TAG,exports.TAB_ITEM_TAG=x.TAB_ITEM_TAG,exports.TAB_PANEL_TAG=S.TAB_PANEL_TAG,exports.TEXTAREA_SIZE_PRESET=i.TEXTAREA_SIZE_PRESET,exports.TEXTAREA_TAG=Y.TEXTAREA_TAG,exports.TEXT_TAG=_.TEXT_TAG,exports.TIME_PICKER_TAG=ae.TIME_PICKER_TAG,exports.TOAST_TAG=A.TOAST_TAG,exports.TOOLTIP_TAG=de.TOOLTIP_TAG,exports.TYPING_INDICATOR_TAG=k.TYPING_INDICATOR_TAG,exports.commonProps=r.commonProps,exports.createToastService=A.createToastService,exports.disablableBundle=r.disablableBundle,exports.elevatableBundle=r.elevatableBundle,exports.loadableBundle=r.loadableBundle,exports.registerIcons=t.registerIcons,exports.roundableBundle=r.roundableBundle,exports.sizableBundle=r.sizableBundle,exports.themableBundle=r.themableBundle,exports.toast=A.toast;
|
package/dist/index.js
CHANGED
|
@@ -2,64 +2,66 @@ import { CODE_WINDOW_TAG as e } from "./code-window.js";
|
|
|
2
2
|
import { ICON_TAG as t, registerIcons as n } from "./icon.js";
|
|
3
3
|
import { COPY_COMMAND_TAG as r } from "./copy-command.js";
|
|
4
4
|
import { commonProps as i, disablableBundle as a, elevatableBundle as o, loadableBundle as s, roundableBundle as c, sizableBundle as l, themableBundle as u } from "./shared/prop-bundles.js";
|
|
5
|
-
import { CONTROL_SIZE_PRESET as d, FIELD_SIZE_PRESET as f, FILE_INPUT_SIZE_PRESET as p,
|
|
6
|
-
import { PROGRESS_TAG as
|
|
7
|
-
import { RefineConfigError as
|
|
8
|
-
import { CAROUSEL_SLIDE_TAG as
|
|
9
|
-
import { CAROUSEL_TAG as
|
|
10
|
-
import { AVATAR_GROUP_TAG as
|
|
11
|
-
import { BREADCRUMB_ITEM_TAG as
|
|
12
|
-
import { CARD_TAG as
|
|
13
|
-
import { CHAT_MESSAGE_TAG as
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
-
import {
|
|
34
|
-
import {
|
|
35
|
-
import {
|
|
36
|
-
import {
|
|
37
|
-
import {
|
|
38
|
-
import {
|
|
39
|
-
import {
|
|
40
|
-
import {
|
|
41
|
-
import {
|
|
42
|
-
import {
|
|
43
|
-
import {
|
|
44
|
-
import {
|
|
45
|
-
import {
|
|
46
|
-
import {
|
|
47
|
-
import {
|
|
48
|
-
import {
|
|
49
|
-
import {
|
|
50
|
-
import {
|
|
51
|
-
import {
|
|
52
|
-
import {
|
|
53
|
-
import {
|
|
54
|
-
import {
|
|
55
|
-
import {
|
|
56
|
-
import {
|
|
57
|
-
import {
|
|
58
|
-
import {
|
|
59
|
-
import {
|
|
60
|
-
import {
|
|
61
|
-
import {
|
|
62
|
-
import {
|
|
63
|
-
import {
|
|
64
|
-
import {
|
|
65
|
-
|
|
5
|
+
import { CONTROL_SIZE_PRESET as d, FIELD_SIZE_PRESET as f, FILE_INPUT_SIZE_PRESET as p, LIST_SIZE_PRESET as m, MENU_SIZE_PRESET as h, MESSAGE_COMPOSER_SIZE_PRESET as g, SLIDER_SIZE_PRESET as _, SWITCH_SIZE_PRESET as v, TEXTAREA_SIZE_PRESET as y } from "./shared/size-presets.js";
|
|
6
|
+
import { PROGRESS_TAG as b } from "./progress.js";
|
|
7
|
+
import { RefineConfigError as x, RefineError as S } from "./errors.js";
|
|
8
|
+
import { CAROUSEL_SLIDE_TAG as C } from "./content/carousel/carousel-slide.js";
|
|
9
|
+
import { CAROUSEL_TAG as w } from "./carousel.js";
|
|
10
|
+
import { AVATAR_GROUP_TAG as T, AVATAR_TAG as E } from "./avatar.js";
|
|
11
|
+
import { BREADCRUMB_ITEM_TAG as D, BREADCRUMB_TAG as O } from "./breadcrumb.js";
|
|
12
|
+
import { CARD_TAG as k } from "./card.js";
|
|
13
|
+
import { CHAT_MESSAGE_TAG as A } from "./chat-message.js";
|
|
14
|
+
import { LIST_CTX as j, LIST_TAG as M } from "./list.js";
|
|
15
|
+
import { LIST_ITEM_TAG as N } from "./list-item.js";
|
|
16
|
+
import { BUTTON_GROUP_CTX as P, BUTTON_GROUP_TAG as F } from "./button-group.js";
|
|
17
|
+
import { FORM_CTX as I } from "./inputs/shared/form-context.js";
|
|
18
|
+
import { BUTTON_TAG as L } from "./button.js";
|
|
19
|
+
import { PAGINATION_TAG as R } from "./pagination.js";
|
|
20
|
+
import { SEPARATOR_TAG as z } from "./separator.js";
|
|
21
|
+
import { TABLE_TAG as B } from "./table.js";
|
|
22
|
+
import { TEXT_TAG as V } from "./text.js";
|
|
23
|
+
import { ACCORDION_CTX as H, ACCORDION_TAG as U } from "./accordion.js";
|
|
24
|
+
import { TABS_CTX as W, TABS_TAG as G } from "./tabs.js";
|
|
25
|
+
import { ACCORDION_ITEM_TAG as K } from "./accordion-item.js";
|
|
26
|
+
import { TAB_ITEM_TAG as q } from "./tab-item.js";
|
|
27
|
+
import { TAB_PANEL_TAG as J } from "./tab-panel.js";
|
|
28
|
+
import { ASYNC_TAG as Y } from "./async.js";
|
|
29
|
+
import { ALERT_TAG as X } from "./alert.js";
|
|
30
|
+
import { BADGE_TAG as Z } from "./badge.js";
|
|
31
|
+
import { CHIP_TAG as Q } from "./chip.js";
|
|
32
|
+
import { PASSWORD_STRENGTH_TAG as $ } from "./password-strength.js";
|
|
33
|
+
import { SKELETON_TAG as ee } from "./skeleton.js";
|
|
34
|
+
import { TYPING_INDICATOR_TAG as te } from "./typing-indicator.js";
|
|
35
|
+
import { TOAST_TAG as ne, createToastService as re, toast as ie } from "./toast.js";
|
|
36
|
+
import { CHECKBOX_GROUP_CTX as ae, CHECKBOX_GROUP_TAG as oe } from "./checkbox-group.js";
|
|
37
|
+
import { CHECKBOX_TAG as se } from "./checkbox.js";
|
|
38
|
+
import { INPUT_TAG as ce } from "./input.js";
|
|
39
|
+
import { COMBOBOX_TAG as le } from "./combobox.js";
|
|
40
|
+
import { SELECT_TAG as ue } from "./select.js";
|
|
41
|
+
import { POPOVER_TAG as de } from "./popover.js";
|
|
42
|
+
import { DATAGRID_TAG as fe } from "./datagrid.js";
|
|
43
|
+
import { CALENDAR_TAG as pe } from "./calendar.js";
|
|
44
|
+
import { DATE_PICKER_TAG as me } from "./date-picker.js";
|
|
45
|
+
import { FILE_INPUT_TAG as he } from "./file-input.js";
|
|
46
|
+
import { FORM_TAG as ge } from "./form.js";
|
|
47
|
+
import { MESSAGE_COMPOSER_TAG as _e } from "./message-composer.js";
|
|
48
|
+
import { NUMBER_INPUT_TAG as ve } from "./number-input.js";
|
|
49
|
+
import { OTP_INPUT_TAG as ye } from "./otp-input.js";
|
|
50
|
+
import { RADIO_GROUP_CTX as be, RADIO_GROUP_TAG as xe } from "./radio-group.js";
|
|
51
|
+
import { RADIO_TAG as Se } from "./radio.js";
|
|
52
|
+
import { RATING_TAG as Ce } from "./rating.js";
|
|
53
|
+
import { SLIDER_TAG as we } from "./slider.js";
|
|
54
|
+
import { SWITCH_TAG as Te } from "./switch.js";
|
|
55
|
+
import { TEXTAREA_TAG as Ee } from "./textarea.js";
|
|
56
|
+
import { TIME_PICKER_TAG as De } from "./time-picker.js";
|
|
57
|
+
import { BOX_TAG as Oe } from "./box.js";
|
|
58
|
+
import { GRID_ITEM_TAG as ke } from "./grid-item.js";
|
|
59
|
+
import { GRID_TAG as Ae } from "./grid.js";
|
|
60
|
+
import { NAVBAR_CTX as je, NAVBAR_ITEM_TAG as Me, NAVBAR_TAG as Ne } from "./navbar.js";
|
|
61
|
+
import { SIDEBAR_CTX as Pe, SIDEBAR_GROUP_TAG as Fe, SIDEBAR_ITEM_TAG as Ie, SIDEBAR_TAG as Le } from "./sidebar.js";
|
|
62
|
+
import { COMMAND_PALETTE_ITEM_TAG as Re, COMMAND_PALETTE_TAG as ze } from "./command-palette.js";
|
|
63
|
+
import { DIALOG_TAG as Be } from "./dialog.js";
|
|
64
|
+
import { DRAWER_TAG as Ve } from "./drawer.js";
|
|
65
|
+
import { MENU_ITEM_TAG as He, MENU_TAG as Ue } from "./menu.js";
|
|
66
|
+
import { TOOLTIP_TAG as We } from "./tooltip.js";
|
|
67
|
+
export { H as ACCORDION_CTX, K as ACCORDION_ITEM_TAG, U as ACCORDION_TAG, X as ALERT_TAG, Y as ASYNC_TAG, T as AVATAR_GROUP_TAG, E as AVATAR_TAG, Z as BADGE_TAG, Oe as BOX_TAG, D as BREADCRUMB_ITEM_TAG, O as BREADCRUMB_TAG, P as BUTTON_GROUP_CTX, F as BUTTON_GROUP_TAG, L as BUTTON_TAG, pe as CALENDAR_TAG, k as CARD_TAG, C as CAROUSEL_SLIDE_TAG, w as CAROUSEL_TAG, A as CHAT_MESSAGE_TAG, ae as CHECKBOX_GROUP_CTX, oe as CHECKBOX_GROUP_TAG, se as CHECKBOX_TAG, Q as CHIP_TAG, e as CODE_WINDOW_TAG, le as COMBOBOX_TAG, Re as COMMAND_PALETTE_ITEM_TAG, ze as COMMAND_PALETTE_TAG, d as CONTROL_SIZE_PRESET, r as COPY_COMMAND_TAG, fe as DATAGRID_TAG, me as DATE_PICKER_TAG, Be as DIALOG_TAG, Ve as DRAWER_TAG, f as FIELD_SIZE_PRESET, p as FILE_INPUT_SIZE_PRESET, he as FILE_INPUT_TAG, I as FORM_CTX, ge as FORM_TAG, ke as GRID_ITEM_TAG, Ae as GRID_TAG, t as ICON_TAG, ce as INPUT_TAG, j as LIST_CTX, N as LIST_ITEM_TAG, m as LIST_SIZE_PRESET, M as LIST_TAG, He as MENU_ITEM_TAG, h as MENU_SIZE_PRESET, Ue as MENU_TAG, g as MESSAGE_COMPOSER_SIZE_PRESET, _e as MESSAGE_COMPOSER_TAG, je as NAVBAR_CTX, Me as NAVBAR_ITEM_TAG, Ne as NAVBAR_TAG, ve as NUMBER_INPUT_TAG, ye as OTP_INPUT_TAG, R as PAGINATION_TAG, $ as PASSWORD_STRENGTH_TAG, de as POPOVER_TAG, b as PROGRESS_TAG, be as RADIO_GROUP_CTX, xe as RADIO_GROUP_TAG, Se as RADIO_TAG, Ce as RATING_TAG, x as RefineConfigError, S as RefineError, ue as SELECT_TAG, z as SEPARATOR_TAG, Pe as SIDEBAR_CTX, Fe as SIDEBAR_GROUP_TAG, Ie as SIDEBAR_ITEM_TAG, Le as SIDEBAR_TAG, ee as SKELETON_TAG, _ as SLIDER_SIZE_PRESET, we as SLIDER_TAG, v as SWITCH_SIZE_PRESET, Te as SWITCH_TAG, B as TABLE_TAG, W as TABS_CTX, G as TABS_TAG, q as TAB_ITEM_TAG, J as TAB_PANEL_TAG, y as TEXTAREA_SIZE_PRESET, Ee as TEXTAREA_TAG, V as TEXT_TAG, De as TIME_PICKER_TAG, ne as TOAST_TAG, We as TOOLTIP_TAG, te as TYPING_INDICATOR_TAG, i as commonProps, re as createToastService, a as disablableBundle, o as elevatableBundle, s as loadableBundle, n as registerIcons, c as roundableBundle, l as sizableBundle, u as themableBundle, ie as toast };
|