@htmlbricks/hb-bundle 0.66.7 → 0.66.9

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.
@@ -0,0 +1,4591 @@
1
+ # HTML Bricks `hb-*` web components — agent & LLM reference
2
+
3
+ ## What this document is
4
+
5
+ A **consumer-oriented reference** for **`hb-*` custom elements**: tags, attributes, events, slots, and how to theme and interact with them from **HTML, JavaScript, or any UI stack**. It does **not** describe how to build or publish the library.
6
+
7
+ ## How to use these components
8
+
9
+ 1. **Attributes** — Public properties use **snake_case**. In HTML, attributes are strings; objects and arrays are usually passed as **JSON strings** unless a component’s section says otherwise.
10
+ 2. **Theming** — The UI follows **Bootstrap 5** and **Bootstrap Icons**. To change appearance (colors, spacing, typography, borders, radii), set **Bootstrap CSS custom properties** (`--bs-*`, e.g. `--bs-primary`, `--bs-body-bg`, `--bs-border-radius`) on the **host element**, a parent wrapper, or higher in the cascade. Those variables typically flow into **shadow DOM** content. Prefer **`--bs-*`** over unrelated ad-hoc rules. Each component section below may list extra **CSS variables** and **`::part(...)`** names when exposed.
11
+ 3. **Shadow DOM** — Most hosts attach a **shadow root**. Style via inherited **variables** and documented **`::part(...)`** selectors; listen for **`CustomEvent`** on the host for outputs described in each section.
12
+ 4. **Reading the entries** — Sections may use tables or TypeScript-like snippets for props and events; treat those as the **public contract** for that tag.
13
+
14
+ ### Table of contents — how to use this with LLMs
15
+
16
+ - The **full text** of each component’s `README.md` is **included later in this same document**, under an HTML anchor `id="wc-<folder>"` (Markdown link: `#wc-<folder>`).
17
+ - The **jsDelivr** URL is the **canonical** `README.md` from npm (`@htmlbricks/hb-<folder>` at version **0.66.9**). The prose merged **below this TOC** is the **same document body** (duplicate for single-file reading).
18
+ - When answering **from this file only**, use the **in-document** link (`#wc-…`) so the model stays in one context. Use the **jsDelivr** link when you need the standalone README URL (e.g. fetching from the CDN).
19
+
20
+ ## Table of contents
21
+
22
+ Each line lists: **tag — folder**, then **canonical README (npm/jsDelivr)**, then **same content inside this file**.
23
+
24
+ - **`hb-area-code` — `area-code`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-area-code@0.66.9/README.md) · [same text in this document](#wc-area-code)
25
+ - **`hb-auth` — `auth`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-auth@0.66.9/README.md) · [same text in this document](#wc-auth)
26
+ - **`hb-auth-social-login-button` — `auth-social-login-button`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-auth-social-login-button@0.66.9/README.md) · [same text in this document](#wc-auth-social-login-button)
27
+ - **`hb-banner` — `banner`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-banner@0.66.9/README.md) · [same text in this document](#wc-banner)
28
+ - **`hb-calendar-appointments` — `calendar-appointments`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-calendar-appointments@0.66.9/README.md) · [same text in this document](#wc-calendar-appointments)
29
+ - **`hb-calendar-events` — `calendar-events`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-calendar-events@0.66.9/README.md) · [same text in this document](#wc-calendar-events)
30
+ - **`hb-captcha-google-recaptcha-v2-invisible` — `captcha-google-recaptcha-v2-invisible`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-captcha-google-recaptcha-v2-invisible@0.66.9/README.md) · [same text in this document](#wc-captcha-google-recaptcha-v2-invisible)
31
+ - **`hb-card-video` — `card-video`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-card-video@0.66.9/README.md) · [same text in this document](#wc-card-video)
32
+ - **`hb-chartjs` — `chartjs`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-chartjs@0.66.9/README.md) · [same text in this document](#wc-chartjs)
33
+ - **`hb-checkout` — `checkout`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-checkout@0.66.9/README.md) · [same text in this document](#wc-checkout)
34
+ - **`hb-checkout-shopping-cart` — `checkout-shopping-cart`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-checkout-shopping-cart@0.66.9/README.md) · [same text in this document](#wc-checkout-shopping-cart)
35
+ - **`hb-contact-card` — `contact-card`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-contact-card@0.66.9/README.md) · [same text in this document](#wc-contact-card)
36
+ - **`hb-contact-item` — `contact-item`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-contact-item@0.66.9/README.md) · [same text in this document](#wc-contact-item)
37
+ - **`hb-cookie-law-banner` — `cookie-law-banner`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-cookie-law-banner@0.66.9/README.md) · [same text in this document](#wc-cookie-law-banner)
38
+ - **`hb-dashboard-card1` — `dashboard-card1`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-dashboard-card1@0.66.9/README.md) · [same text in this document](#wc-dashboard-card1)
39
+ - **`hb-dashboard-counter-lines` — `dashboard-counter-lines`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-dashboard-counter-lines@0.66.9/README.md) · [same text in this document](#wc-dashboard-counter-lines)
40
+ - **`hb-dashboard-indicator` — `dashboard-indicator`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-dashboard-indicator@0.66.9/README.md) · [same text in this document](#wc-dashboard-indicator)
41
+ - **`hb-dialog` — `dialog`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-dialog@0.66.9/README.md) · [same text in this document](#wc-dialog)
42
+ - **`hb-dialog-loader` — `dialog-loader`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-dialog-loader@0.66.9/README.md) · [same text in this document](#wc-dialog-loader)
43
+ - **`hb-dialogform` — `dialogform`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-dialogform@0.66.9/README.md) · [same text in this document](#wc-dialogform)
44
+ - **`hb-downloader` — `downloader`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-downloader@0.66.9/README.md) · [same text in this document](#wc-downloader)
45
+ - **`hb-dropdown-notifications` — `dropdown-notifications`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-dropdown-notifications@0.66.9/README.md) · [same text in this document](#wc-dropdown-notifications)
46
+ - **`hb-dropdown-simple` — `dropdown-simple`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-dropdown-simple@0.66.9/README.md) · [same text in this document](#wc-dropdown-simple)
47
+ - **`hb-editor-video` — `editor-video`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-editor-video@0.66.9/README.md) · [same text in this document](#wc-editor-video)
48
+ - **`hb-faq-component` — `faq-component`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-faq-component@0.66.9/README.md) · [same text in this document](#wc-faq-component)
49
+ - **`hb-footer` — `footer`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-footer@0.66.9/README.md) · [same text in this document](#wc-footer)
50
+ - **`hb-form` — `form`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-form@0.66.9/README.md) · [same text in this document](#wc-form)
51
+ - **`hb-form-composer` — `form-composer`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-form-composer@0.66.9/README.md) · [same text in this document](#wc-form-composer)
52
+ - **`hb-form-contact` — `form-contact`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-form-contact@0.66.9/README.md) · [same text in this document](#wc-form-contact)
53
+ - **`hb-funnel` — `funnel`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-funnel@0.66.9/README.md) · [same text in this document](#wc-funnel)
54
+ - **`hb-gallery-video` — `gallery-video`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-gallery-video@0.66.9/README.md) · [same text in this document](#wc-gallery-video)
55
+ - **`hb-gauge` — `gauge`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-gauge@0.66.9/README.md) · [same text in this document](#wc-gauge)
56
+ - **`hb-input-area` — `input-area`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-input-area@0.66.9/README.md) · [same text in this document](#wc-input-area)
57
+ - **`hb-input-array-objects` — `input-array-objects`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-input-array-objects@0.66.9/README.md) · [same text in this document](#wc-input-array-objects)
58
+ - **`hb-input-array-tags` — `input-array-tags`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-input-array-tags@0.66.9/README.md) · [same text in this document](#wc-input-array-tags)
59
+ - **`hb-input-checkbox` — `input-checkbox`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-input-checkbox@0.66.9/README.md) · [same text in this document](#wc-input-checkbox)
60
+ - **`hb-input-color` — `input-color`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-input-color@0.66.9/README.md) · [same text in this document](#wc-input-color)
61
+ - **`hb-input-coords` — `input-coords`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-input-coords@0.66.9/README.md) · [same text in this document](#wc-input-coords)
62
+ - **`hb-input-date` — `input-date`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-input-date@0.66.9/README.md) · [same text in this document](#wc-input-date)
63
+ - **`hb-input-datetime` — `input-datetime`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-input-datetime@0.66.9/README.md) · [same text in this document](#wc-input-datetime)
64
+ - **`hb-input-email` — `input-email`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-input-email@0.66.9/README.md) · [same text in this document](#wc-input-email)
65
+ - **`hb-input-file` — `input-file`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-input-file@0.66.9/README.md) · [same text in this document](#wc-input-file)
66
+ - **`hb-input-number` — `input-number`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-input-number@0.66.9/README.md) · [same text in this document](#wc-input-number)
67
+ - **`hb-input-radio` — `input-radio`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-input-radio@0.66.9/README.md) · [same text in this document](#wc-input-radio)
68
+ - **`hb-input-range` — `input-range`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-input-range@0.66.9/README.md) · [same text in this document](#wc-input-range)
69
+ - **`hb-input-select` — `input-select`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-input-select@0.66.9/README.md) · [same text in this document](#wc-input-select)
70
+ - **`hb-input-text` — `input-text`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-input-text@0.66.9/README.md) · [same text in this document](#wc-input-text)
71
+ - **`hb-json-viewer` — `json-viewer`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-json-viewer@0.66.9/README.md) · [same text in this document](#wc-json-viewer)
72
+ - **`hb-layout` — `layout`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-layout@0.66.9/README.md) · [same text in this document](#wc-layout)
73
+ - **`hb-layout-desktop` — `layout-desktop`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-layout-desktop@0.66.9/README.md) · [same text in this document](#wc-layout-desktop)
74
+ - **`hb-layout-mobile` — `layout-mobile`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-layout-mobile@0.66.9/README.md) · [same text in this document](#wc-layout-mobile)
75
+ - **`hb-map` — `map`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-map@0.66.9/README.md) · [same text in this document](#wc-map)
76
+ - **`hb-markdown-viewer` — `markdown-viewer`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-markdown-viewer@0.66.9/README.md) · [same text in this document](#wc-markdown-viewer)
77
+ - **`hb-matrix-video` — `matrix-video`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-matrix-video@0.66.9/README.md) · [same text in this document](#wc-matrix-video)
78
+ - **`hb-messages-box` — `messages-box`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-messages-box@0.66.9/README.md) · [same text in this document](#wc-messages-box)
79
+ - **`hb-messages-list` — `messages-list`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-messages-list@0.66.9/README.md) · [same text in this document](#wc-messages-list)
80
+ - **`hb-messages-send` — `messages-send`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-messages-send@0.66.9/README.md) · [same text in this document](#wc-messages-send)
81
+ - **`hb-messages-topics-card` — `messages-topics-card`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-messages-topics-card@0.66.9/README.md) · [same text in this document](#wc-messages-topics-card)
82
+ - **`hb-modal-video` — `modal-video`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-modal-video@0.66.9/README.md) · [same text in this document](#wc-modal-video)
83
+ - **`hb-navbar` — `navbar`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-navbar@0.66.9/README.md) · [same text in this document](#wc-navbar)
84
+ - **`hb-offcanvas` — `offcanvas`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-offcanvas@0.66.9/README.md) · [same text in this document](#wc-offcanvas)
85
+ - **`hb-order-list` — `order-list`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-order-list@0.66.9/README.md) · [same text in this document](#wc-order-list)
86
+ - **`hb-pad-joystick` — `pad-joystick`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-pad-joystick@0.66.9/README.md) · [same text in this document](#wc-pad-joystick)
87
+ - **`hb-page-checkout` — `page-checkout`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-page-checkout@0.66.9/README.md) · [same text in this document](#wc-page-checkout)
88
+ - **`hb-page-invoice` — `page-invoice`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-page-invoice@0.66.9/README.md) · [same text in this document](#wc-page-invoice)
89
+ - **`hb-paginate` — `paginate`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-paginate@0.66.9/README.md) · [same text in this document](#wc-paginate)
90
+ - **`hb-paragraps-around-image` — `paragraps-around-image`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-paragraps-around-image@0.66.9/README.md) · [same text in this document](#wc-paragraps-around-image)
91
+ - **`hb-paragraps-around-image-cell` — `paragraps-around-image-cell`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-paragraps-around-image-cell@0.66.9/README.md) · [same text in this document](#wc-paragraps-around-image-cell)
92
+ - **`hb-payment-paypal` — `payment-paypal`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-payment-paypal@0.66.9/README.md) · [same text in this document](#wc-payment-paypal)
93
+ - **`hb-player-input-streaming` — `player-input-streaming`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-player-input-streaming@0.66.9/README.md) · [same text in this document](#wc-player-input-streaming)
94
+ - **`hb-player-live` — `player-live`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-player-live@0.66.9/README.md) · [same text in this document](#wc-player-live)
95
+ - **`hb-player-live-camera-ptz` — `player-live-camera-ptz`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-player-live-camera-ptz@0.66.9/README.md) · [same text in this document](#wc-player-live-camera-ptz)
96
+ - **`hb-product-comparison` — `product-comparison`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-product-comparison@0.66.9/README.md) · [same text in this document](#wc-product-comparison)
97
+ - **`hb-range-slider` — `range-slider`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-range-slider@0.66.9/README.md) · [same text in this document](#wc-range-slider)
98
+ - **`hb-searchbar` — `searchbar`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-searchbar@0.66.9/README.md) · [same text in this document](#wc-searchbar)
99
+ - **`hb-shop-item-cell` — `shop-item-cell`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-shop-item-cell@0.66.9/README.md) · [same text in this document](#wc-shop-item-cell)
100
+ - **`hb-shop-item-row` — `shop-item-row`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-shop-item-row@0.66.9/README.md) · [same text in this document](#wc-shop-item-row)
101
+ - **`hb-sidebar-cards-navigator` — `sidebar-cards-navigator`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-sidebar-cards-navigator@0.66.9/README.md) · [same text in this document](#wc-sidebar-cards-navigator)
102
+ - **`hb-sidebar-desktop` — `sidebar-desktop`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-sidebar-desktop@0.66.9/README.md) · [same text in this document](#wc-sidebar-desktop)
103
+ - **`hb-sidenav-button` — `sidenav-button`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-sidenav-button@0.66.9/README.md) · [same text in this document](#wc-sidenav-button)
104
+ - **`hb-sidenav-link` — `sidenav-link`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-sidenav-link@0.66.9/README.md) · [same text in this document](#wc-sidenav-link)
105
+ - **`hb-site-contacts-row` — `site-contacts-row`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-site-contacts-row@0.66.9/README.md) · [same text in this document](#wc-site-contacts-row)
106
+ - **`hb-site-paragraph-with-image` — `site-paragraph-with-image`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-site-paragraph-with-image@0.66.9/README.md) · [same text in this document](#wc-site-paragraph-with-image)
107
+ - **`hb-site-slideshow` — `site-slideshow`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-site-slideshow@0.66.9/README.md) · [same text in this document](#wc-site-slideshow)
108
+ - **`hb-site-slideshow-horizontal` — `site-slideshow-horizontal`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-site-slideshow-horizontal@0.66.9/README.md) · [same text in this document](#wc-site-slideshow-horizontal)
109
+ - **`hb-skeleton-component` — `skeleton-component`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-skeleton-component@0.66.9/README.md) · [same text in this document](#wc-skeleton-component)
110
+ - **`hb-stylus-notebook` — `stylus-notebook`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-stylus-notebook@0.66.9/README.md) · [same text in this document](#wc-stylus-notebook)
111
+ - **`hb-stylus-paper` — `stylus-paper`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-stylus-paper@0.66.9/README.md) · [same text in this document](#wc-stylus-paper)
112
+ - **`hb-table` — `table`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-table@0.66.9/README.md) · [same text in this document](#wc-table)
113
+ - **`hb-terms-doc-templates` — `terms-doc-templates`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-terms-doc-templates@0.66.9/README.md) · [same text in this document](#wc-terms-doc-templates)
114
+ - **`hb-toast` — `toast`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-toast@0.66.9/README.md) · [same text in this document](#wc-toast)
115
+ - **`hb-tooltip` — `tooltip`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-tooltip@0.66.9/README.md) · [same text in this document](#wc-tooltip)
116
+ - **`hb-uploader` — `uploader`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-uploader@0.66.9/README.md) · [same text in this document](#wc-uploader)
117
+ - **`hb-vertical-img-txt-archive` — `vertical-img-txt-archive`** — [README on jsDelivr](https://cdn.jsdelivr.net/npm/@htmlbricks/hb-vertical-img-txt-archive@0.66.9/README.md) · [same text in this document](#wc-vertical-img-txt-archive)
118
+
119
+ ---
120
+
121
+ <a id="wc-area-code"></a>
122
+
123
+ ## `hb-area-code` — area-code
124
+
125
+ **Category:** utilities | **Tags:** utilities, developer
126
+
127
+ ### What it does
128
+
129
+ Displays arbitrary text inside a `<code>` block with a themed background. A copy button copies the content to the clipboard, shows brief confirmation, and dispatches a `clipboardCopyText` custom event with the copied string.
130
+
131
+ ### Custom element
132
+
133
+ `hb-area-code`
134
+
135
+ ### Attributes / props (snake_case)
136
+
137
+ | Property | Type | Notes |
138
+ | --- | --- | --- |
139
+ | `id` | string (optional) | Element identifier. |
140
+ | `style` | string (optional) | Inline style string. |
141
+ | `content` | string (required) | Text shown inside the code block. |
142
+
143
+ **Style / theming:** CSS custom property `--hb-area-code-background` (color). **CSS part:** `content` (the code element). No HTML slots.
144
+
145
+ ### Events (`CustomEvent` names)
146
+
147
+ - **`clipboardCopyText`** — `{ text: string }` — Fired after a successful clipboard copy with the copied text.
148
+
149
+ ### Usage notes
150
+
151
+ - Uses Bootstrap-aligned theming patterns; primary styling is the component SCSS and `--hb-area-code-background`.
152
+ - Icons: not central to this component (copy UI is internal).
153
+ - Shadow DOM: `::part(content)` can target the code element.
154
+ - No i18n entries in `docs.ts`.
155
+
156
+ ### Minimal HTML example
157
+
158
+ ```html
159
+ <hb-area-code content="npm install @htmlbricks/hb-area-code"></hb-area-code>
160
+ ```
161
+
162
+ ---
163
+
164
+ <a id="wc-auth"></a>
165
+
166
+ ## `hb-auth` — auth
167
+
168
+ **Category:** auth | **Tags:** auth
169
+
170
+ ### What it does
171
+
172
+ Full authentication UI driven by the `type` attribute: local login and registration (with optional “remember me”), email activation, password recovery and related notices, OTP and two-factor setup/verification. Supports OAuth2 social providers via embedded social-login buttons, configurable backend URIs and HTTP options, optional i18n, and dispatches events for login, registration, recovery/activation, and OAuth flow steps.
173
+
174
+ ### Custom element
175
+
176
+ `hb-auth`
177
+
178
+ ### Attributes / props (snake_case)
179
+
180
+ | Property | Type | Notes |
181
+ | --- | --- | --- |
182
+ | `id` | string (optional) | Element identifier. |
183
+ | `style` | string (optional) | Inline style string. |
184
+ | `type` | union (optional) | `"login"` \| `"register"` \| `"activate"` \| `"recover"` \| `"forgotpassword"` \| `"mailrecoverinfo"` \| `"otp"` \| `"2fa_code"` \| `"2fa_config"` — which screen to show. |
185
+ | `email` | string (optional) | Pre-filled or context email. |
186
+ | `i18nlang` | string (optional) | Language key (e.g. `en`, `it`). |
187
+ | `sessionkey` | string (optional) | Session-related key for flows. |
188
+ | `social_auth_server_url` | string (optional) | Base URL for social auth server. |
189
+ | `redirectonlogin` | string (optional) | Redirect after login. |
190
+ | `redirectoncreate` | string (optional) | Redirect after registration. |
191
+ | `loginuri` | string (optional) | Backend login endpoint. |
192
+ | `registeruri` | string (optional) | Backend register endpoint. |
193
+ | `activateuri` | string (optional) | Activation endpoint. |
194
+ | `recoveruri` | string (optional) | Recovery endpoint. |
195
+ | `requestmethod` | string (optional) | HTTP method for API calls. |
196
+ | `appendqueryparams` | string (optional) | Extra query params (often JSON string in HTML). |
197
+ | `appendbodyparams` | string (optional) | Extra body params (often JSON string in HTML). |
198
+ | `logouri` | string (optional) | Logo image URL. |
199
+ | `oauth2providers` | array (optional) | JSON array of `{ name, url?, params? }` provider configs (see `hb-auth-social-login-button` provider shape). |
200
+ | `disableregister` | boolean (optional) | Hide or disable registration. |
201
+ | `enable_recover_password` | boolean (optional) | Enable recover-password UI. |
202
+ | `passwordpattern` | string (optional) | Password validation pattern. |
203
+ | `recoverycode` | string (optional) | Recovery/activation code. |
204
+ | `disablelocal` | boolean (optional) | OAuth-only mode when true. |
205
+
206
+ **Slots:** `header`. **i18n:** Italian and English declared in metadata.
207
+
208
+ ### Events (`CustomEvent` names)
209
+
210
+ - **`login`** — `{ token?: string; email?: string; password?: string; rememberMe?: boolean }`
211
+ - **`register`** — Intersection of `any` with `{ requestSent: { email: string; password: string }; email: string; password: string }` (types).
212
+ - **`recoverOrActivate`** — `{ password: string; recoverycode: string; email: string }`
213
+ - **`recoverPassword`** — `{ email: string }`
214
+ - **`oauthFlowInit`** — `{ token?: string; provider: "facebook" \| "google" \| "gitlab" \| "github" \| "authentik"; tmpCode?: string; redirect_uri?: string }`
215
+ - **`oauthFlowSuccess`** — `{ token: string }`
216
+ - **`oauthFlowCustom`** — `{ provider: ... }` (same provider union as above)
217
+
218
+ ### Usage notes
219
+
220
+ - Built with Bootstrap 5 variables (`--bs-*` in style setup).
221
+ - Uses bootstrap-icons where the UI shows icons.
222
+ - Shadow DOM: slot `header` for custom branding; social buttons are composed internally.
223
+ - Set `i18nlang` for Italian or English strings where supported.
224
+
225
+ ### Minimal HTML example
226
+
227
+ ```html
228
+ <hb-auth
229
+ type="login"
230
+ i18nlang="en"
231
+ logouri="https://example.com/logo.svg"
232
+ loginuri="https://api.example.com/auth/login"
233
+ ></hb-auth>
234
+ ```
235
+
236
+ ---
237
+
238
+ <a id="wc-auth-social-login-button"></a>
239
+
240
+ ## `hb-auth-social-login-button` — auth-social-login-button
241
+
242
+ **Category:** auth | **Tags:** auth, oauth
243
+
244
+ ### What it does
245
+
246
+ Clickable OAuth provider tile (default SVGs for Google, GitHub, GitLab, Facebook, Authentik; overridable via slot). Builds the provider authorization URL from `provider` params or uses a prebuilt `url`, then parses the return URL to exchange code/token with `simple-serverless-auth-client` when `social_auth_server_url` and `auth_cookie_name` are set. Emits `oauthFlowInit`, `oauthFlowSuccess`, or `oauthFlowCustom` for custom flows.
247
+
248
+ ### Custom element
249
+
250
+ `hb-auth-social-login-button`
251
+
252
+ ### Attributes / props (snake_case)
253
+
254
+ | Property | Type | Notes |
255
+ | --- | --- | --- |
256
+ | `id` | string (optional) | Element identifier. |
257
+ | `style` | string (optional) | Inline style string. |
258
+ | `social_auth_server_url` | string (optional) | Server URL for token exchange. |
259
+ | `auth_cookie_name` | string (optional) | Cookie name used by the auth client. |
260
+ | `redirectonlogin` | string (optional) | Post-login redirect. |
261
+ | `provider` | object (optional) | JSON: `{ url?: string; name: "facebook" \| "google" \| "gitlab" \| "github" \| "authentik"; params?: { redirect_url; client_id; scope; auth_server_url? } }`. |
262
+
263
+ **Slots:** `header`. **i18n:** Italian and English in metadata.
264
+
265
+ ### Events (`CustomEvent` names)
266
+
267
+ - **`oauthFlowSuccess`** — `{ token: string }`
268
+ - **`oauthFlowInit`** — `{ token?: string; provider: IProvider; tmpCode?: string; redirect_uri?: string }` (`IProvider` = facebook \| google \| gitlab \| github \| authentik)
269
+ - **`oauthFlowCustom`** — `{ provider: IProvider }`
270
+
271
+ ### Usage notes
272
+
273
+ - Bootstrap 5 theme variables (`--bs-*`) apply to layout/button styling.
274
+ - Provider artwork aligns with common OAuth brands; slot `header` can override presentation.
275
+ - Shadow DOM encapsulates default SVGs; configure via attributes and slots.
276
+ - Use `i18nlang` on parent `hb-auth` or this component’s i18n metadata where wired.
277
+
278
+ ### Minimal HTML example
279
+
280
+ ```html
281
+ <hb-auth-social-login-button
282
+ provider='{"name":"google","url":"https://accounts.google.com/o/oauth2/v2/auth?..."}'
283
+ social_auth_server_url="https://auth.example.com"
284
+ auth_cookie_name="session"
285
+ ></hb-auth-social-login-button>
286
+ ```
287
+
288
+ ---
289
+
290
+ <a id="wc-banner"></a>
291
+
292
+ ## `hb-banner` — banner
293
+
294
+ **Category:** content | **Tags:** content, marketing
295
+
296
+ ### What it does
297
+
298
+ Marketing-style hero strip: logo image beside a title and subtitle, using Bootstrap grid. Layout switches from side-by-side on large screens to stacked, centered content on smaller breakpoints.
299
+
300
+ ### Custom element
301
+
302
+ `hb-banner`
303
+
304
+ ### Attributes / props (snake_case)
305
+
306
+ | Property | Type | Notes |
307
+ | --- | --- | --- |
308
+ | `id` | string (optional) | Element identifier. |
309
+ | `style` | string (optional) | Inline style string. |
310
+ | `title` | string (optional) | Main heading text. |
311
+ | `description` | string (optional) | Subtitle or body text. |
312
+ | `logouri` | string (optional) | Logo image URL. |
313
+
314
+ No CSS vars or slots in style setup metadata.
315
+
316
+ ### Events (`CustomEvent` names)
317
+
318
+ None declared in types (`Events` is an empty object).
319
+
320
+ ### Usage notes
321
+
322
+ - Relies on Bootstrap 5 grid and responsive display utilities (`d-none`, `d-lg-block`, etc.).
323
+ - Use bootstrap-icons only if you extend the component; this banner is primarily image + text.
324
+ - Shadow DOM keeps typography/spacing internal unless slotted content is added in implementation.
325
+ - No i18n in `docs.ts`.
326
+
327
+ ### Minimal HTML example
328
+
329
+ ```html
330
+ <hb-banner
331
+ title="Welcome"
332
+ description="Build faster with our component library."
333
+ logouri="https://example.com/logo.svg"
334
+ ></hb-banner>
335
+ ```
336
+
337
+ ---
338
+
339
+ <a id="wc-calendar-appointments"></a>
340
+
341
+ ## `hb-calendar-appointments` — calendar-appointments
342
+
343
+ **Category:** calendar | **Tags:** calendar, appointments
344
+
345
+ ### What it does
346
+
347
+ Month agenda view: events for the current month are grouped by calendar day and listed chronologically with weekday, day number, time, and colored markers. Optional header with month navigation; changing month or selecting a day dispatches `changeCalendarDate`, `changeSelectedDate`, and clicking a row dispatches `calendarEventClick`. Uses Italian public holidays metadata; `events` is supplied as JSON.
348
+
349
+ ### Custom element
350
+
351
+ `hb-calendar-appointments`
352
+
353
+ ### Attributes / props (snake_case)
354
+
355
+ | Property | Type | Notes |
356
+ | --- | --- | --- |
357
+ | `id` | string (optional) | Element identifier. |
358
+ | `style` | string (optional) | Inline style string. |
359
+ | `date` | Date (optional) | Current calendar month context; pass as ISO string / parsed JSON in HTML. |
360
+ | `events` | array (optional) | JSON array of `{ date: Date; label: string; id: string; link?; icon?; color? }`. |
361
+ | `selected` | Date (optional) | Selected day. |
362
+ | `disable_header` | boolean (optional) | Hide the navigation header when true. |
363
+
364
+ **Theme:** `--hb-calendar-selected`, `--hb-calendar-hover`, `--hb-calendar-today`. **Parts:** `calendar-header`, `calendar-current-time-header`, `cell`. **Slots:** `header_month_icon_prev`, `header_month_icon_next`, `header`, `calendar_month`.
365
+
366
+ ### Events (`CustomEvent` names)
367
+
368
+ - **`calendarEventClick`** — `{ eventId: string }`
369
+ - **`changeCalendarDate`** — `{ date: Date }`
370
+ - **`changeSelectedDate`** — `{ selectedDate: Date }`
371
+
372
+ ### Usage notes
373
+
374
+ - Bootstrap 5–oriented colors via CSS variables above.
375
+ - Italian holiday data is built in; adjust expectations for non-IT locales.
376
+ - Shadow DOM exposes named parts for deeper styling.
377
+ - Pass `events` and dates as JSON strings from HTML attributes; runtime parsing depends on the web component bridge.
378
+
379
+ ### Minimal HTML example
380
+
381
+ ```html
382
+ <hb-calendar-appointments
383
+ disable_header="false"
384
+ events='[{"id":"1","label":"Meeting","date":"2026-03-15T10:00:00.000Z"}]'
385
+ ></hb-calendar-appointments>
386
+ ```
387
+
388
+ ---
389
+
390
+ <a id="wc-calendar-events"></a>
391
+
392
+ ## `hb-calendar-events` — calendar-events
393
+
394
+ **Category:** calendar | **Tags:** calendar
395
+
396
+ ### What it does
397
+
398
+ Classic month grid (7-day week header and variable rows) with selectable cells, “today” styling, and event chips inside each day. Supports adjacent-month padding cells, Italian holidays, JSON `events`, and the same navigation/selection events as the appointments calendar.
399
+
400
+ ### Custom element
401
+
402
+ `hb-calendar-events`
403
+
404
+ ### Attributes / props (snake_case)
405
+
406
+ | Property | Type | Notes |
407
+ | --- | --- | --- |
408
+ | `id` | string (optional) | Element identifier. |
409
+ | `style` | string (optional) | Inline style string. |
410
+ | `date` | Date (optional) | Visible month anchor. |
411
+ | `events` | array (optional) | JSON array of `{ date: Date; label: string; id: string; link?; icon?; color? }`. |
412
+ | `selected` | Date (optional) | Highlighted date. |
413
+ | `disable_header` | boolean (optional) | Hide month navigation when true. |
414
+
415
+ **Theme:** `--hb-calendar-selected`, `--hb-calendar-hover`, `--hb-calendar-today`. **Parts:** `calendar-header`, `calendar-current-time-header`, `cell`. **Slots:** `header_month_icon_prev`, `header_month_icon_next`, `header`, `calendar_month`.
416
+
417
+ ### Events (`CustomEvent` names)
418
+
419
+ - **`calendarEventClick`** — `{ eventId: string }`
420
+ - **`changeCalendarDate`** — `{ date: Date }`
421
+ - **`changeSelectedDate`** — `{ selectedDate: Date }`
422
+
423
+ ### Usage notes
424
+
425
+ - Styling aligns with Bootstrap-themed CSS variables on the host.
426
+ - Shares behavior with `hb-calendar-appointments` for events and navigation.
427
+ - Shadow DOM + parts allow styling cells and headers.
428
+ - No i18n entries in `docs.ts`; holidays skew Italian.
429
+
430
+ ### Minimal HTML example
431
+
432
+ ```html
433
+ <hb-calendar-events
434
+ events='[{"id":"a","label":"Launch","date":"2026-03-01T09:00:00.000Z","color":"#0d6efd"}]'
435
+ ></hb-calendar-events>
436
+ ```
437
+
438
+ ---
439
+
440
+ <a id="wc-captcha-google-recaptcha-v2-invisible"></a>
441
+
442
+ ## `hb-captcha-google-recaptcha-v2-invisible` — captcha-google-recaptcha-v2-invisible
443
+
444
+ **Category:** utilities | **Tags:** utilities, security
445
+
446
+ ### What it does
447
+
448
+ Loads the Google reCAPTCHA v2 invisible SDK, renders the widget with your `api_key`, and exposes `grecaptcha.execute()` / reset when the `get` attribute changes after render. Dispatches `googleRecaptchaRendered` once mounted and `googleRecaptchaV2Response` with the token from the verification callback.
449
+
450
+ ### Custom element
451
+
452
+ `hb-captcha-google-recaptcha-v2-invisible`
453
+
454
+ ### Attributes / props (snake_case)
455
+
456
+ | Property | Type | Notes |
457
+ | --- | --- | --- |
458
+ | `id` | string (optional) | Element identifier. |
459
+ | `style` | string (optional) | Inline style string. |
460
+ | `api_key` | string (optional) | Google reCAPTCHA site key. |
461
+ | `get` | any (optional) | Trigger prop: changing after render drives execute/reset (see component behavior). |
462
+
463
+ **Bootstrap theme vars** in metadata. **CSS part:** `invalid-feedback`. No slots.
464
+
465
+ ### Events (`CustomEvent` names)
466
+
467
+ - **`googleRecaptchaV2Response`** — `{ response: string }` — Verification token from Google.
468
+ - **`googleRecaptchaRendered`** — `{ render: true }` — Widget finished rendering.
469
+
470
+ ### Usage notes
471
+
472
+ - Uses Bootstrap form-feedback styling via the `invalid-feedback` part.
473
+ - Requires loading Google’s script; CSP and domain allowlisting apply outside the component.
474
+ - Shadow DOM wraps the widget; style invalid states through the exposed part.
475
+ - No i18n in `docs.ts`.
476
+
477
+ ### Minimal HTML example
478
+
479
+ ```html
480
+ <hb-captcha-google-recaptcha-v2-invisible api_key="YOUR_SITE_KEY"></hb-captcha-google-recaptcha-v2-invisible>
481
+ ```
482
+
483
+ ---
484
+
485
+ <a id="wc-card-video"></a>
486
+
487
+ ## `hb-card-video` — card-video
488
+
489
+ **Category:** media | **Tags:** media, video
490
+
491
+ ### What it does
492
+
493
+ Bootstrap card with a 16:9 media area: YouTube embed when `provider` is `youtube`, otherwise an HTML5 `<video>` with MP4 source. Optional title, truncated description, formatted `time` via Day.js (`dateformat`), “read more” link label, and social share placeholders when `pageuri` is set.
494
+
495
+ ### Custom element
496
+
497
+ `hb-card-video`
498
+
499
+ ### Attributes / props (snake_case)
500
+
501
+ | Property | Type | Notes |
502
+ | --- | --- | --- |
503
+ | `id` | string (optional) | Element identifier. |
504
+ | `style` | string (optional) | Inline style string. |
505
+ | `title` | string (optional) | Card title. |
506
+ | `description` | string (optional) | Body text (truncated in UI). |
507
+ | `videosrc` | string (required) | Video URL or embed source. |
508
+ | `provider` | union (optional) | `"youtube"` or `""` for native video. |
509
+ | `pageuri` | string (optional) | Page URL for share widgets. |
510
+ | `linklabel` | string (optional) | Label for the “read more” style link. |
511
+ | `time` | Date (optional) | Publication or event time; pass parseable date string in HTML. |
512
+ | `dateformat` | string (optional) | Day.js format string for `time`. |
513
+
514
+ **Slot:** `card-footer`. No CSS vars in metadata.
515
+
516
+ ### Events (`CustomEvent` names)
517
+
518
+ None declared in types (`Events` is an empty object).
519
+
520
+ ### Usage notes
521
+
522
+ - Card layout follows Bootstrap card patterns.
523
+ - YouTube vs file video is selected only via `provider`; ensure `videosrc` matches the mode.
524
+ - Shadow DOM contains the player and share UI; slot `card-footer` extends the card.
525
+ - No i18n in `docs.ts`.
526
+
527
+ ### Minimal HTML example
528
+
529
+ ```html
530
+ <hb-card-video
531
+ videosrc="https://example.com/media/clip.mp4"
532
+ title="Product tour"
533
+ description="A short walkthrough of the dashboard."
534
+ time="2026-03-01T12:00:00.000Z"
535
+ dateformat="MMM D, YYYY"
536
+ ></hb-card-video>
537
+ ```
538
+
539
+ ---
540
+
541
+ <a id="wc-chartjs"></a>
542
+
543
+ ## `hb-chartjs` — chartjs
544
+
545
+ **Category:** data | **Tags:** data, chart
546
+
547
+ ### What it does
548
+
549
+ Embeds Chart.js (line, bar, pie, radar, time scales, etc.) inside the shadow DOM. Pass a JSON `data` object with `type`, `data`, and optional `options`; the chart is recreated on data changes and when the container resizes. Clicking the canvas dispatches `chartClick` with the nearest point’s label and value.
550
+
551
+ ### Custom element
552
+
553
+ `hb-chartjs`
554
+
555
+ ### Attributes / props (snake_case)
556
+
557
+ | Property | Type | Notes |
558
+ | --- | --- | --- |
559
+ | `id` | string (optional) | Element identifier. |
560
+ | `style` | string (optional) | Inline style string. |
561
+ | `data` | any (required) | JSON Chart.js configuration: `{ type, data, options? }`. |
562
+
563
+ **CSS part:** `container`. No slots.
564
+
565
+ ### Events (`CustomEvent` names)
566
+
567
+ - **`chartClick`** — `{ label?: string; value?: any }[]` — Per types, payload is an **array** of point-like objects (label/value pairs from the hit detection).
568
+
569
+ ### Usage notes
570
+
571
+ - Chart.js runs inside shadow DOM; global Chart defaults may not apply unless duplicated.
572
+ - Bootstrap is not required for the canvas itself; host page can still use BS layout around the element.
573
+ - ResizeObserver + debounced window resize keep charts responsive.
574
+ - Pass `data` as a JSON string attribute from plain HTML.
575
+
576
+ ### Minimal HTML example
577
+
578
+ ```html
579
+ <hb-chartjs
580
+ data='{"type":"bar","data":{"labels":["A","B"],"datasets":[{"label":"K","data":[1,2]}]},"options":{}}'
581
+ ></hb-chartjs>
582
+ ```
583
+
584
+ ---
585
+
586
+ <a id="wc-checkout"></a>
587
+
588
+ ## `hb-checkout` — checkout
589
+
590
+ **Category:** commerce | **Tags:** commerce, checkout
591
+
592
+ ### What it does
593
+
594
+ End-to-end checkout flow: editable billing/shipping user profile (`hb-form`), shipment method choice, optional card form, Google Pay, and PayPal via `hb-payment-paypal` according to `gateways` and `payment` JSON. Parses string props into objects, merges card network defaults, and tracks `completed` to switch between editable steps and a read-only confirmation summary with events for payment and form submissions.
595
+
596
+ ### Custom element
597
+
598
+ `hb-checkout`
599
+
600
+ ### Attributes / props (snake_case)
601
+
602
+ | Property | Type | Notes |
603
+ | --- | --- | --- |
604
+ | `id` | string (optional) | Element identifier. |
605
+ | `style` | string (optional) | Inline style string. |
606
+ | `shipments` | array (required) | JSON `IShipment[]`: price, selected?, standard?, arriveDate, available, id, label, currency. |
607
+ | `user` | object (optional) | JSON `IUser`: fullName, address fields, nationality, fixed?. |
608
+ | `gateways` | array (required) | JSON `IGateway[]`: id `google` \| `paypal`, label, fees, PayPal/Google Pay fields. |
609
+ | `payment` | object (required) | JSON `IPayment`: merchantName, total, currencyCode, countryCode, type?, shipmentFee?. |
610
+ | `completed` | union (optional) | `"yes"` \| `"no"` — controls summary vs edit flow. |
611
+
612
+ **CSS vars:** `--edit-color`, `--paypal-button-color`, `--hb-heckout-border`, plus Bootstrap `--bs-*`. **Parts:** `title`, `subtitle`. **Slots:** `payment_terms`, `payment_completed`, `userinfo`, `title`.
613
+
614
+ ### Events (`CustomEvent` names)
615
+
616
+ - **`paymentCompleted`** — `{ total: number; method: string; completed: true }`
617
+ - **`saveUser`** — `IUser` payload
618
+ - **`saveShipment`** — `IShipment` payload
619
+ - **`completed`** — `"yes"` \| `"no"` (listed in `Events` interface)
620
+
621
+ ### Usage notes
622
+
623
+ - Heavy use of Bootstrap 5 variables for chrome and buttons.
624
+ - Nested web components (`hb-form`, payment elements) live inside the flow.
625
+ - Large JSON props are typical; validate shapes before setting attributes.
626
+ - No i18n array in `docs.ts` for this component.
627
+
628
+ ### Minimal HTML example
629
+
630
+ ```html
631
+ <hb-checkout
632
+ completed="no"
633
+ payment='{"merchantName":"Acme","total":49.99,"currencyCode":"EUR","countryCode":"IT","type":"buy"}'
634
+ shipments='[{"id":"std","label":"Standard","price":5,"arriveDate":"2026-04-01T00:00:00.000Z","available":true,"currency":"€"}]'
635
+ gateways='[{"id":"paypal","label":"PayPal","paypalid":"sandbox"}]'
636
+ ></hb-checkout>
637
+ ```
638
+
639
+ ---
640
+
641
+ <a id="wc-checkout-shopping-cart"></a>
642
+
643
+ ## `hb-checkout-shopping-cart` — checkout-shopping-cart
644
+
645
+ **Category:** commerce | **Tags:** commerce, cart
646
+
647
+ ### What it does
648
+
649
+ Order summary built on `hb-table`: maps `payment.items` into rows (name, quantity, line total), computes subtotal, tax, and grand total from item prices, and shows country/currency. When `completed` is enabled it switches to a compact “order placed” state; `payment` can be supplied as JSON.
650
+
651
+ ### Custom element
652
+
653
+ `hb-checkout-shopping-cart`
654
+
655
+ ### Attributes / props (snake_case)
656
+
657
+ | Property | Type | Notes |
658
+ | --- | --- | --- |
659
+ | `id` | string (optional) | Element identifier. |
660
+ | `style` | string (optional) | Inline style string. |
661
+ | `payment` | object (required) | JSON `IShoppingPayment`: countryCode `IT` \| `US` \| `EU`, currencySymbol?, shipmentFee?, items: `IShopItem[]` (id, name, unitaryPrice, taxPercentage, quantity?, unit?). |
662
+ | `completed` | union (optional) | `"yes"` \| `"no"` — order-placed compact UI when enabled. |
663
+
664
+ **CSS vars:** `--hb-checkout-border`, Bootstrap `--bs-*`. No slots or parts in metadata.
665
+
666
+ ### Events (`CustomEvent` names)
667
+
668
+ None declared in types (`Events` is an empty object).
669
+
670
+ ### Usage notes
671
+
672
+ - Styling follows Bootstrap 5 palette via shared variables.
673
+ - Depends on `hb-table` internally for row layout.
674
+ - Shadow DOM encapsulates the table presentation.
675
+ - No i18n in `docs.ts`.
676
+
677
+ ### Minimal HTML example
678
+
679
+ ```html
680
+ <hb-checkout-shopping-cart
681
+ payment='{"countryCode":"IT","currencySymbol":"€","items":[{"id":"sku1","name":"T-shirt","unitaryPrice":19.99,"taxPercentage":22,"quantity":2}]}'
682
+ completed="no"
683
+ ></hb-checkout-shopping-cart>
684
+ ```
685
+
686
+ ---
687
+
688
+ <a id="wc-contact-card"></a>
689
+
690
+ ## `hb-contact-card` — contact-card
691
+
692
+ **Category:** content | **Tags:** content, contact
693
+
694
+ ### What it does
695
+
696
+ A comprehensive contact card: personal, contact, company, and social information in a Bootstrap-styled card. Uses one `data` object with structured arrays for phones, addresses, and social profiles. Features include avatar placeholder, clickable contact rows, social links, collapsible sections, and an actions dropdown with grouping, badges, and links.
697
+
698
+ ### Custom element
699
+
700
+ `hb-contact-card`
701
+
702
+ ### Attributes / props (snake_case)
703
+
704
+ | Property | Type | Notes |
705
+ | --- | --- | --- |
706
+ | `id` | string (optional) | Element identifier. |
707
+ | `style` | string (optional) | Inline style string. |
708
+ | `data` | object (required) | JSON `ContactData`: names, title, emails[], phones[], website, addresses[], company fields, notes, avatar, lat/long, socialMedia[], clickable?. |
709
+ | `actions_list` | array (optional) | JSON `IDropDownMenuListItem[]`: key, label, badge?, group?, linkHref?. |
710
+ | `i18nlang` | string (optional) | `en` \| `it` (storybook). |
711
+ | `show_header_collapse_button` | union (optional) | `"yes"` \| `"no"` — default `"yes"`. |
712
+ | `start_collapsed` | union (optional) | `"yes"` \| `"no"` — default `"no"`. |
713
+
714
+ **CSS vars:** `--hb--contact-card-*` (colors, radius, shadows). **Parts:** `card`, `header`, `body`, `avatar`, `actions`. No HTML slots.
715
+
716
+ ### Events (`CustomEvent` names)
717
+
718
+ - **`contactClick`** — `{ id: string; contact: Component }` (`Component` = this element’s prop bag type)
719
+ - **`contactEdit`** — `{ id: string; contact: Component }`
720
+ - **`contactDelete`** — `{ id: string; contact: Component }`
721
+ - **`phoneClick`** — `{ id: string; phone: PhoneNumber }`
722
+ - **`emailClick`** — `{ id: string; email: EmailAddress }`
723
+ - **`websiteClick`** — `{ id: string; website: string }`
724
+ - **`socialClick`** — `{ id: string; social: SocialMedia }`
725
+ - **`addressClick`** — `{ id: string; address: Address }`
726
+ - **`collapseChange`** — `{ id: string; collapsed: boolean }`
727
+
728
+ ### Usage notes
729
+
730
+ - Colors mirror Bootstrap 5 semantic tokens via custom properties.
731
+ - Icons use bootstrap-icons for contact and social affordances.
732
+ - Shadow DOM exposes `::part()` hooks for card regions.
733
+ - Set `i18nlang` for English or Italian strings.
734
+
735
+ ### Minimal HTML example
736
+
737
+ ```html
738
+ <hb-contact-card
739
+ id="c1"
740
+ i18nlang="en"
741
+ data='{"fullName":"Alex Doe","emails":[{"address":"alex@example.com","type":"work"}],"clickable":true}'
742
+ actions_list='[{"key":"edit","label":"Edit"}]'
743
+ ></hb-contact-card>
744
+ ```
745
+
746
+ ---
747
+
748
+ <a id="wc-contact-item"></a>
749
+
750
+ ## `hb-contact-item` — contact-item
751
+
752
+ **Category:** content | **Tags:** content, contact
753
+
754
+ ### What it does
755
+
756
+ Single contact line (mutually exclusive props): phone, postal address, email, website, or social network. Renders a Bootstrap Icon and optional visible text; JSON `config` toggles icons (filled/outline), label text, and whether clicks dispatch `contactclick` with `{ action, options }` vs opening a window (maps URL, `mailto`, external site, or social page).
757
+
758
+ ### Custom element
759
+
760
+ `hb-contact-item`
761
+
762
+ ### Attributes / props (snake_case)
763
+
764
+ | Property | Type | Notes |
765
+ | --- | --- | --- |
766
+ | `id` | string (optional) | Element identifier. |
767
+ | `style` | string (optional) | Inline style string. |
768
+ | `phone` | object (optional) | JSON `IPhone`: number, callOnClick?. |
769
+ | `address` | object (optional) | JSON `IAddress`: mapUri?, latLang?, address, shortAddress?. |
770
+ | `email` | object (optional) | JSON `IEmail`: mailLink?, address. |
771
+ | `site` | object (optional) | JSON `ISite`: label?, uri?, open?. |
772
+ | `social` | object (optional) | JSON `ISocial`: label?, pageUri?, name. |
773
+ | `config` | object (optional) | JSON `IConfig`: icon?.fill, text?, dispatcher?. |
774
+
775
+ No CSS vars, parts, or slots in metadata.
776
+
777
+ ### Events (`CustomEvent` names)
778
+
779
+ - **`contactclick`** — `{ action: string; options: any }` — Exact event name is lowercase in types.
780
+
781
+ ### Usage notes
782
+
783
+ - Icons come from bootstrap-icons naming conventions.
784
+ - Only one of phone/address/email/site/social should be primary per row (per description).
785
+ - Shadow DOM wraps the row; no theme variables declared in docs.
786
+ - No i18n in `docs.ts`.
787
+
788
+ ### Minimal HTML example
789
+
790
+ ```html
791
+ <hb-contact-item
792
+ email='{"address":"hello@example.com","mailLink":true}'
793
+ config='{"text":true,"dispatcher":true}'
794
+ ></hb-contact-item>
795
+ ```
796
+
797
+ ---
798
+
799
+ <a id="wc-cookie-law-banner"></a>
800
+
801
+ ## `hb-cookie-law-banner` — cookie-law-banner
802
+
803
+ **Category:** layout | **Tags:** layout, compliance
804
+
805
+ ### What it does
806
+
807
+ Bootstrap alert cookie notice until the user accepts or declines; the choice is stored in `localStorage` under `cookielaw`. Supports i18n via `i18nlang`, optional `cookielawuri4more` link, JSON `capabilities` for extended consent, slots to override title/text, and dispatches `acceptCookieLaw` with `{ accepted: "yes" | "no" }`.
808
+
809
+ ### Custom element
810
+
811
+ `hb-cookie-law-banner`
812
+
813
+ ### Attributes / props (snake_case)
814
+
815
+ | Property | Type | Notes |
816
+ | --- | --- | --- |
817
+ | `id` | string (optional) | Element identifier. |
818
+ | `style` | string (optional) | Inline style string. |
819
+ | `allowdecline` | union (optional) | `"yes"` \| `"no"` — show decline action. |
820
+ | `i18nlang` | string (optional) | Language key (e.g. `en`, `it`). |
821
+ | `capabilities` | object (optional) | JSON `ICapabilities`: cookie groups and items with scopes, mandatory flags, etc. |
822
+ | `cookielawuri4more` | string (optional) | “Learn more” URL. |
823
+
824
+ **Slots:** `title`, `text`. **i18n:** Italian and English in metadata.
825
+
826
+ ### Events (`CustomEvent` names)
827
+
828
+ - **`acceptCookieLaw`** — `{ accepted: "yes" | "no" }`
829
+
830
+ ### Usage notes
831
+
832
+ - Uses Bootstrap alert styling patterns.
833
+ - Fullscreen layout size hint in metadata for Storybook-style hosts.
834
+ - Shadow DOM; override copy via `title` and `text` slots.
835
+ - Set `i18nlang` to match declared languages.
836
+
837
+ ### Minimal HTML example
838
+
839
+ ```html
840
+ <hb-cookie-law-banner
841
+ allowdecline="yes"
842
+ i18nlang="en"
843
+ cookielawuri4more="https://example.com/cookies"
844
+ ></hb-cookie-law-banner>
845
+ ```
846
+
847
+ ---
848
+
849
+ <a id="wc-dashboard-card1"></a>
850
+
851
+ ## `hb-dashboard-card1` — dashboard-card1
852
+
853
+ **Category:** data | **Tags:** data, dashboard
854
+
855
+ ### What it does
856
+
857
+ Bootstrap card shell for dashboards: JSON `header` supplies optional Bootstrap Icon name, title label, and right-aligned badge; JSON `body` can remove inner padding with `noborder`. Slots let you inject markup (metadata lists `content`; description also references `header_content` for layout between header and body—confirm in implementation if both exist).
858
+
859
+ ### Custom element
860
+
861
+ `hb-dashboard-card1`
862
+
863
+ ### Attributes / props (snake_case)
864
+
865
+ | Property | Type | Notes |
866
+ | --- | --- | --- |
867
+ | `id` | string (optional) | Element identifier. |
868
+ | `style` | string (optional) | Inline style string. |
869
+ | `header` | object (optional) | JSON `{ icon?: string; label: string; badge?: string }`. |
870
+ | `body` | object (optional) | JSON `{ noborder?: boolean }`. |
871
+
872
+ **Bootstrap `--bs-*` theme vars.** **Parts:** `text_placeholder`, `badge`, `card`. **Slot (metadata):** `content`.
873
+
874
+ ### Events (`CustomEvent` names)
875
+
876
+ None declared in types (`Events` is an empty object).
877
+
878
+ ### Usage notes
879
+
880
+ - Styling is Bootstrap 5–aligned via standard color variables.
881
+ - `header.icon` should be a bootstrap-icons icon name string.
882
+ - Use `::part(card)` and related parts for host-level theming inside shadow root.
883
+ - No i18n in `docs.ts`.
884
+
885
+ ### Minimal HTML example
886
+
887
+ ```html
888
+ <hb-dashboard-card1
889
+ header='{"label":"Revenue","icon":"graph-up","badge":"+12%"}'
890
+ body='{"noborder":false}'
891
+ ></hb-dashboard-card1>
892
+ ```
893
+
894
+ ---
895
+
896
+ <a id="wc-dashboard-counter-lines"></a>
897
+
898
+ ## `hb-dashboard-counter-lines` — dashboard-counter-lines
899
+
900
+ **Category:** data | **Tags:** data, dashboard
901
+
902
+ ### What it does
903
+
904
+ Vertical list of metric rows from JSON `lines`: each row shows optional Bootstrap Icon, label text, and a secondary badge value. `link.type` chooses behavior—open URI in a new tab, same-window navigation, custom `counterClick` event with a key, or a static row with no click handler.
905
+
906
+ ### Custom element
907
+
908
+ `hb-dashboard-counter-lines`
909
+
910
+ ### Attributes / props (snake_case)
911
+
912
+ | Property | Type | Notes |
913
+ | --- | --- | --- |
914
+ | `id` | string (optional) | Element identifier. |
915
+ | `style` | string (optional) | Inline style string. |
916
+ | `lines` | array (optional) | JSON `Line[]`: text, value, link?: `{ type: "tab" \| "page" \| "event"; uri: string }`, index?, icon?. |
917
+
918
+ **Bootstrap `--bs-*` vars.** **Parts:** `item`, `icon`, `text`, `value`. No slots.
919
+
920
+ ### Events (`CustomEvent` names)
921
+
922
+ - **`counterClick`** — `{ key: string }` — Used when a line’s `link.type` is `"event"` (per docs behavior).
923
+
924
+ ### Usage notes
925
+
926
+ - Icons use bootstrap-icons names in the `icon` field.
927
+ - Rows are dashboard-style metrics, not a navigation menu.
928
+ - Shadow DOM exposes granular parts per row segment.
929
+ - No i18n in `docs.ts`.
930
+
931
+ ### Minimal HTML example
932
+
933
+ ```html
934
+ <hb-dashboard-counter-lines
935
+ lines='[{"text":"Active users","value":"1.2k","icon":"people"},{"text":"Errors","value":"3","icon":"exclamation-triangle"}]'
936
+ ></hb-dashboard-counter-lines>
937
+ ```
938
+
939
+ ---
940
+
941
+ <a id="wc-dashboard-indicator"></a>
942
+
943
+ ## `hb-dashboard-indicator` — dashboard-indicator
944
+
945
+ **Category:** data | **Tags:** data, dashboard
946
+
947
+ ### What it does
948
+
949
+ Compact KPI tile: large `number`, caption `text`, and configurable Bootstrap Icon in a green panel. When `link_label` is set, a footer strip is shown and clicks dispatch `dashboardIndicatorClick` with the component `id`.
950
+
951
+ ### Custom element
952
+
953
+ `hb-dashboard-indicator`
954
+
955
+ ### Attributes / props (snake_case)
956
+
957
+ | Property | Type | Notes |
958
+ | --- | --- | --- |
959
+ | `id` | string (optional) | Element identifier (used in click payload). |
960
+ | `style` | string (optional) | Inline style string. |
961
+ | `number` | number (required) | Main KPI value. |
962
+ | `text` | string (optional) | Caption under the number. |
963
+ | `icon` | string (required) | Bootstrap Icons name. |
964
+ | `link_label` | string (optional) | If set, shows footer and enables click dispatch. |
965
+
966
+ **CSS var:** `--hb--dashboard-indicator-background`. No slots or parts in metadata.
967
+
968
+ ### Events (`CustomEvent` names)
969
+
970
+ - **`dashboardIndicatorClick`** — `{ id: string }`
971
+
972
+ ### Usage notes
973
+
974
+ - Default panel color is controlled by `--hb--dashboard-indicator-background` (green in defaults).
975
+ - Icon name must match bootstrap-icons.
976
+ - Shadow DOM wraps the tile; pass `id` when using click events.
977
+ - No i18n in `docs.ts`.
978
+
979
+ ### Minimal HTML example
980
+
981
+ ```html
982
+ <hb-dashboard-indicator
983
+ id="kpi-sales"
984
+ number="128"
985
+ text="Orders today"
986
+ icon="cart-check"
987
+ link_label="View details"
988
+ ></hb-dashboard-indicator>
989
+ ```
990
+
991
+ ---
992
+
993
+ <a id="wc-dialog"></a>
994
+
995
+ ## `hb-dialog` — dialog
996
+
997
+ **Category:** overlays | **Tags:** overlays, modal
998
+
999
+ ### What it does
1000
+
1001
+ Bootstrap-styled modal controlled by string `show` (`yes`/`no`): fade transitions, optional backdrop click to close, Escape when `keyboard` is enabled, and `modal-open` on `document.body`. Slots replace title, body, footer, and button labels; default footer emits `modalConfirm` with `{ id, confirm }` and toggles visibility. Also emits `modalShow` when opened or closed.
1002
+
1003
+ ### Custom element
1004
+
1005
+ `hb-dialog`
1006
+
1007
+ ### Attributes / props (snake_case)
1008
+
1009
+ | Property | Type | Notes |
1010
+ | --- | --- | --- |
1011
+ | `id` | string (optional) | Element identifier (included in events). |
1012
+ | `style` | string (optional) | Inline style string. |
1013
+ | `show` | union (optional) | `"yes"` \| `"no"` — visibility. |
1014
+ | `confirm_btn_class` | string (optional) | Bootstrap button classes for confirm. |
1015
+ | `title` | string (optional) | Default title text if slot unused. |
1016
+ | `backdrop` | boolean (optional) | Show backdrop. |
1017
+ | `ignoreBackdrop` | boolean (optional) | Ignore backdrop interactions when true. |
1018
+ | `keyboard` | boolean (optional) | Escape to close. |
1019
+ | `describedby` | string (optional) | ARIA describedby id. |
1020
+ | `labelledby` | string (optional) | ARIA labelledby id. |
1021
+ | `content` | string (optional) | Default body string if slot unused. |
1022
+ | `closelabel` | string (optional) | Close button label. |
1023
+ | `confirmlabel` | string (optional) | Confirm button label. |
1024
+ | `disable_confirm` | boolean (optional) | Disable confirm button. |
1025
+ | `close_btn_class` | string (optional) | Classes for close button. |
1026
+ | `hide_close` | boolean (optional) | Hide close control. |
1027
+ | `hide_confirm` | boolean (optional) | Hide confirm control. |
1028
+
1029
+ **CSS vars:** Bootstrap `--bs-*`, `--hb-modal-max-width`. **Part:** `modal-dialog`. **Slots:** `header`, `modal-footer`, `body-content`, `footer`, `close-button-label`, `confirm-button-label`.
1030
+
1031
+ ### Events (`CustomEvent` names)
1032
+
1033
+ - **`modalConfirm`** — `{ id: string; confirm: boolean }`
1034
+ - **`modalShow`** — `{ id: string; show: true }`
1035
+
1036
+ ### Usage notes
1037
+
1038
+ - Full Bootstrap modal behavior patterns (body scroll lock, backdrop).
1039
+ - bootstrap-icons may appear on buttons depending on implementation.
1040
+ - Teleports/focus live in shadow DOM; test accessibility with real browsers.
1041
+ - No i18n array in `docs.ts`.
1042
+
1043
+ ### Minimal HTML example
1044
+
1045
+ ```html
1046
+ <hb-dialog
1047
+ id="confirm-delete"
1048
+ show="yes"
1049
+ title="Delete item?"
1050
+ content="This cannot be undone."
1051
+ confirmlabel="Delete"
1052
+ closelabel="Cancel"
1053
+ keyboard="true"
1054
+ ></hb-dialog>
1055
+ ```
1056
+
1057
+ ---
1058
+
1059
+ <a id="wc-dialog-loader"></a>
1060
+
1061
+ ## `hb-dialog-loader` — dialog-loader
1062
+
1063
+ **Category:** overlays | **Tags:** overlays, modal, loading
1064
+
1065
+ ### What it does
1066
+
1067
+ Thin wrapper around `hb-dialog` that opens automatically while numeric `percentage` is non-zero and shows a Bootstrap progress bar filled to that value. Forwards `modalShow` from the inner dialog; slots allow overriding the dialog title.
1068
+
1069
+ ### Custom element
1070
+
1071
+ `hb-dialog-loader`
1072
+
1073
+ ### Attributes / props (snake_case)
1074
+
1075
+ | Property | Type | Notes |
1076
+ | --- | --- | --- |
1077
+ | `id` | string (optional) | Element identifier. |
1078
+ | `style` | string (optional) | Inline style string. |
1079
+ | `title` | string (optional) | Dialog title text. |
1080
+ | `percentage` | number (required) | 0 hides/closes behavior; non-zero shows progress (per description). |
1081
+
1082
+ **Bootstrap `--bs-*` vars.** **Slot:** `title`. No parts in metadata.
1083
+
1084
+ ### Events (`CustomEvent` names)
1085
+
1086
+ - **`modalShow`** — `{ id: string; show: true }` — Forwarded from inner `hb-dialog`.
1087
+
1088
+ ### Usage notes
1089
+
1090
+ - Progress UI uses Bootstrap progress component styling.
1091
+ - Parent should drive `percentage` from async task state.
1092
+ - Nested `hb-dialog` means the same overlay constraints as `hb-dialog`.
1093
+ - No i18n in `docs.ts`.
1094
+
1095
+ ### Minimal HTML example
1096
+
1097
+ ```html
1098
+ <hb-dialog-loader title="Uploading…" percentage="45"></hb-dialog-loader>
1099
+ ```
1100
+
1101
+ ---
1102
+
1103
+ <a id="wc-dialogform"></a>
1104
+
1105
+ ## `hb-dialogform` — dialogform
1106
+
1107
+ **Category:** forms | **Tags:** forms, overlays
1108
+
1109
+ ### What it does
1110
+
1111
+ Modal that embeds `hb-form` with the same `schema` contract: live form updates mirror validity and values via `changeForm`, and the confirm button dispatches `modalFormConfirm` with the last valid payload or `modalFormCancel` when dismissed or invalid. Composes `hb-dialog` (backdrop/keyboard, `show`) and re-dispatches `modalShow`.
1112
+
1113
+ ### Custom element
1114
+
1115
+ `hb-dialogform`
1116
+
1117
+ ### Attributes / props (snake_case)
1118
+
1119
+ | Property | Type | Notes |
1120
+ | --- | --- | --- |
1121
+ | `id` | string (optional) | Element identifier. |
1122
+ | `style` | string (optional) | Inline style string. |
1123
+ | `show` | union (optional) | `"yes"` \| `"no"`. |
1124
+ | `dialogclasses` | string (optional) | Extra classes on the dialog (types use `dialogclasses`). |
1125
+ | `title` | string (optional) | Modal title. |
1126
+ | `backdrop` | boolean (optional) | Backdrop toggle. |
1127
+ | `ignoreBackdrop` | boolean (optional) | Ignore backdrop clicks. |
1128
+ | `keyboard` | boolean (optional) | Escape closes when true. |
1129
+ | `describedby` | string (optional) | ARIA describedby. |
1130
+ | `labelledby` | string (optional) | ARIA labelledby. |
1131
+ | `content` | string (optional) | Supplemental content string. |
1132
+ | `closelabel` | string (optional) | Close button label. |
1133
+ | `confirmlabel` | string (optional) | Confirm button label. |
1134
+ | `schema` | array (required) | JSON form schema (same shape as `hb-form` `schema`). |
1135
+
1136
+ **Bootstrap `--bs-*` vars.** **Slots:** `form-header`, `form-footer`, `header`, `modal-footer`, `footer`, `close-button-label`, `confirm-button-label`.
1137
+
1138
+ ### Events (`CustomEvent` names)
1139
+
1140
+ - **`modalFormConfirm`** — `{ [key: string]: any }` — Submitted field map / payload (types use open object).
1141
+ - **`modalShow`** — `{ id: string; show: true }`
1142
+ - **`modalFormCancel`** — `{ id: string; error?: string }`
1143
+ - **`changeForm`** — `{ _valid: boolean; _id: string; values: Record<string, string \| number \| boolean> }` (same as `hb-form` `update` event in form types)
1144
+
1145
+ ### Usage notes
1146
+
1147
+ - Built on Bootstrap modal + form patterns shared with `hb-dialog` and `hb-form`.
1148
+ - `schema` is typically a JSON string in HTML; validate against `hb-form` field types.
1149
+ - Shadow DOM composes nested components; slots map to form and modal regions.
1150
+ - No i18n array in `docs.ts` for this component.
1151
+
1152
+ ### Minimal HTML example
1153
+
1154
+ ```html
1155
+ <hb-dialogform
1156
+ show="yes"
1157
+ title="Edit profile"
1158
+ schema='[{"type":"text","id":"name","label":"Name","required":true,"value":""}]'
1159
+ confirmlabel="Save"
1160
+ closelabel="Cancel"
1161
+ ></hb-dialogform>
1162
+ ```
1163
+
1164
+ ---
1165
+
1166
+ <a id="wc-downloader"></a>
1167
+
1168
+ ## `hb-downloader` — downloader
1169
+
1170
+ **Category:** utilities
1171
+ **Tags:** utilities, files
1172
+
1173
+ ### What it does
1174
+
1175
+ Opens `hb-dialog` while `uri` is set and downloads the resource with `XMLHttpRequest` as a blob: optional JSON `headers`, inferred or explicit `targetfilename`, `Content-Disposition` parsing when exposed by CORS, progress bar from `onprogress`, then triggers a browser file save. Dispatches `downloadComplete` or `downloadError` (with `downloadid`) and propagates `modalShow`; clears/aborts when the dialog closes.
1176
+
1177
+ ### Custom element
1178
+
1179
+ `hb-downloader`
1180
+
1181
+ ### Attributes (snake_case; use string values in HTML)
1182
+
1183
+ - `id` — optional string
1184
+ - `style` — optional string
1185
+ - `uri` — required string (resource URL)
1186
+ - `downloadid` — optional string (correlates emitted events)
1187
+ - `headers` — optional string (JSON object of request headers)
1188
+ - `targetfilename` — optional string (suggested download filename)
1189
+
1190
+ ### Events
1191
+
1192
+ - `downloadError` — `{ downloaded: boolean; id: string; error: Error }`
1193
+ - `downloadComplete` — `{ downloaded: boolean; id: string }`
1194
+ - `modalShow` — `{ id: string; show: true }`
1195
+
1196
+ ### Usage notes
1197
+
1198
+ Pass complex objects (`headers`) as JSON strings on attributes. Requires CORS and appropriate headers for progress and filename hints. Slot: `title` (dialog title).
1199
+
1200
+ ### Minimal HTML example
1201
+
1202
+ ```html
1203
+ <hb-downloader
1204
+ uri="https://example.com/file.pdf"
1205
+ targetfilename="document.pdf"
1206
+ headers="{&quot;Authorization&quot;:&quot;Bearer token&quot;}"
1207
+ ></hb-downloader>
1208
+ ```
1209
+
1210
+ ---
1211
+
1212
+ <a id="wc-dropdown-notifications"></a>
1213
+
1214
+ ## `hb-dropdown-notifications` — dropdown-notifications
1215
+
1216
+ **Category:** overlays
1217
+ **Tags:** overlays, menu, notifications
1218
+
1219
+ ### What it does
1220
+
1221
+ Navbar-style bell control that toggles a Bootstrap `dropdown-menu`: header row with optional “Clear all” (`clearurl`) and a default slot for notification rows, plus optional footer link “View all” (`viewurl`). `align` switches `dropdown-menu-end` for right alignment.
1222
+
1223
+ ### Custom element
1224
+
1225
+ `hb-dropdown-notifications`
1226
+
1227
+ ### Attributes (snake_case; use string values in HTML)
1228
+
1229
+ - `id` — optional string
1230
+ - `style` — optional string
1231
+ - `clearurl` — string (URL for clear-all; empty disables)
1232
+ - `viewurl` — string (URL for view-all; empty disables)
1233
+ - `align` — `"left"` | `"right"`
1234
+
1235
+ ### Events
1236
+
1237
+ None declared on the component type.
1238
+
1239
+ ### Usage notes
1240
+
1241
+ Slot: `title` (dropdown header). Default slot holds notification row content.
1242
+
1243
+ ### Minimal HTML example
1244
+
1245
+ ```html
1246
+ <hb-dropdown-notifications
1247
+ clearurl=""
1248
+ viewurl="/notifications"
1249
+ align="right"
1250
+ >
1251
+ <span slot="title">Notifications</span>
1252
+ <div class="dropdown-item">Sample notification</div>
1253
+ </hb-dropdown-notifications>
1254
+ ```
1255
+
1256
+ ---
1257
+
1258
+ <a id="wc-dropdown-simple"></a>
1259
+
1260
+ ## `hb-dropdown-simple` — dropdown-simple
1261
+
1262
+ **Category:** overlays
1263
+ **Tags:** overlays, menu
1264
+
1265
+ ### What it does
1266
+
1267
+ Bootstrap dropdown menu: `list` is a JSON array of items with `key` (and labels per your schema). Toggle open state with the trigger; choosing an item emits `dropDownClick` with the item `key` and closes the menu. `open` accepts boolean or string (`yes`/`no`); `position` aligns the menu left or right (defaults from host `float: right` when unset). Emits `dropdownSwitch` when toggled.
1268
+
1269
+ ### Custom element
1270
+
1271
+ `hb-dropdown-simple`
1272
+
1273
+ ### Attributes (snake_case; use string values in HTML)
1274
+
1275
+ - `id` — optional string
1276
+ - `style` — optional string (e.g. `float: right` influences default `position`)
1277
+ - `list` — string (JSON array of `{ key, label, … }`; optional `linkHref`, `badge`, `group`)
1278
+ - `open` — optional boolean or `"yes"` / `"no"`
1279
+ - `position` — optional `"left"` | `"right"`
1280
+
1281
+ ### Events
1282
+
1283
+ - `dropdownSwitch` — `{ open: boolean; id: string }`
1284
+ - `dropDownClick` — `{ key: string }`
1285
+
1286
+ ### Usage notes
1287
+
1288
+ CSS parts: `dropdown`, `dropdownbutton`, `dropdowncontent`.
1289
+
1290
+ ### Minimal HTML example
1291
+
1292
+ ```html
1293
+ <hb-dropdown-simple
1294
+ list="[{&quot;key&quot;:&quot;a&quot;,&quot;label&quot;:&quot;Option A&quot;},{&quot;key&quot;:&quot;b&quot;,&quot;label&quot;:&quot;Option B&quot;}]"
1295
+ position="left"
1296
+ ></hb-dropdown-simple>
1297
+ ```
1298
+
1299
+ ---
1300
+
1301
+ <a id="wc-editor-video"></a>
1302
+
1303
+ ## `hb-editor-video` — editor-video
1304
+
1305
+ **Category:** media
1306
+ **Tags:** media, video, editor
1307
+
1308
+ ### What it does
1309
+
1310
+ Video trimmer UI: plays `src` with an `hb-range-slider` synced to the playhead and in/out bounds (`track` min/max seconds). Numeric time fields, cue-to-current-time buttons, and optional `hb-form` gate final submission. Emits `changeTrackValues`, `dispatchTrack` when no form is used, and form-driven submit when metadata is valid.
1311
+
1312
+ ### Custom element
1313
+
1314
+ `hb-editor-video`
1315
+
1316
+ ### Attributes (snake_case; use string values in HTML)
1317
+
1318
+ - `id` — optional string
1319
+ - `style` — optional string
1320
+ - `src` — required string (video URL)
1321
+ - `form` — optional string (JSON / schema for embedded `hb-form` when gating submit)
1322
+ - `track` — optional string (JSON `{ minValue, maxValue }` in seconds)
1323
+
1324
+ ### Events
1325
+
1326
+ - `changeTrackValues` — `{ minVaule: number; maxValue: number }` (note: first key is spelled `minVaule` in the implementation)
1327
+ - `dispatchTrack` — `ITrack` or track merged with form submit payload when `form` is set
1328
+
1329
+ ### Usage notes
1330
+
1331
+ Registers `hb-range-slider` and `hb-form`. Without `form`, use `dispatchTrack` for the trimmed range; with `form`, submission dispatches `dispatchTrack` including validated form fields.
1332
+
1333
+ ### Minimal HTML example
1334
+
1335
+ ```html
1336
+ <hb-editor-video
1337
+ src="https://example.com/video.mp4"
1338
+ track="{&quot;minValue&quot;:0,&quot;maxValue&quot;:120}"
1339
+ ></hb-editor-video>
1340
+ ```
1341
+
1342
+ ---
1343
+
1344
+ <a id="wc-faq-component"></a>
1345
+
1346
+ ## `hb-faq-component` — faq-component
1347
+
1348
+ **Category:** content
1349
+ **Tags:** content
1350
+
1351
+ ### What it does
1352
+
1353
+ FAQ layout with a horizontal topic strip (Bootstrap Icons + labels) that sets an optional `filter` key, and an accordion list built from JSON `info` entries (`title`, `topic`, HTML `text`). Checkbox hack expands/collapses answers; topics with `catchAll` clear the filter.
1354
+
1355
+ ### Custom element
1356
+
1357
+ `hb-faq-component`
1358
+
1359
+ ### Attributes (snake_case; use string values in HTML)
1360
+
1361
+ - `id` — optional string
1362
+ - `style` — optional string
1363
+ - `info` — optional string (JSON array of `{ topic?, title, text }`; `text` may contain HTML)
1364
+ - `topics` — optional string (JSON array of `{ key, label, icon, catchAll?, index? }`)
1365
+ - `filter` — optional string (active topic key)
1366
+
1367
+ ### Events
1368
+
1369
+ None declared on the component type.
1370
+
1371
+ ### Usage notes
1372
+
1373
+ Drive content via `info` and `topics` as JSON strings. Icon names use Bootstrap Icons.
1374
+
1375
+ ### Minimal HTML example
1376
+
1377
+ ```html
1378
+ <hb-faq-component
1379
+ topics="[{&quot;key&quot;:&quot;general&quot;,&quot;label&quot;:&quot;General&quot;,&quot;icon&quot;:&quot;question-circle&quot;}]"
1380
+ info="[{&quot;topic&quot;:&quot;general&quot;,&quot;title&quot;:&quot;First question&quot;,&quot;text&quot;:&quot;&lt;p&gt;Answer here.&lt;/p&gt;&quot;}]"
1381
+ ></hb-faq-component>
1382
+ ```
1383
+
1384
+ ---
1385
+
1386
+ <a id="wc-footer"></a>
1387
+
1388
+ ## `hb-footer` — footer
1389
+
1390
+ **Category:** layout
1391
+ **Tags:** layout, navigation
1392
+
1393
+ ### What it does
1394
+
1395
+ Site footer in `small`, `regular`, or `large` layouts: company block, optional brand/contacts column, link columns, social icons, `hb-contact-item` rows, and policy links—all driven by JSON props. On small layouts the body can expand/collapse unless `disable_expanding_small` is set; slots `footerheader`, `footercontent`, and `footerbottom` wrap major regions.
1396
+
1397
+ ### Custom element
1398
+
1399
+ `hb-footer`
1400
+
1401
+ ### Attributes (snake_case; use string values in HTML)
1402
+
1403
+ - `id` — optional string
1404
+ - `style` — optional string
1405
+ - `company` — required string (JSON: logo, names, description, VAT, etc.)
1406
+ - `brandandcontacts` — optional string (JSON)
1407
+ - `columns` — optional string (JSON array of titled link columns / cells)
1408
+ - `policies` — optional string (JSON array of `{ label, key, link? }`)
1409
+ - `contacts` — optional string (JSON: phones, addresses, emails, sites)
1410
+ - `socials` — optional string (JSON: facebook, youtube, …)
1411
+ - `type` — optional `"small"` | `"regular"` | `"large"`
1412
+ - `disable_expanding_small` — optional boolean (string in HTML)
1413
+
1414
+ ### Events
1415
+
1416
+ - `footerClick` — `{ elClick: string }`
1417
+
1418
+ ### Usage notes
1419
+
1420
+ Slots: `footerpolicy`, `footerheader`, `footercontent`, `footerbottom`, `footer_small`. CSS part: `column-cell-button-content`. Layout size metadata in docs: `fullscreen`.
1421
+
1422
+ ### Minimal HTML example
1423
+
1424
+ ```html
1425
+ <hb-footer
1426
+ type="regular"
1427
+ company="{&quot;logoUri&quot;:&quot;https://example.com/logo.svg&quot;,&quot;siteName&quot;:&quot;Site&quot;,&quot;companyName&quot;:&quot;ACME&quot;,&quot;description&quot;:&quot;Tagline&quot;}"
1428
+ columns="[]"
1429
+ policies="[]"
1430
+ ></hb-footer>
1431
+ ```
1432
+
1433
+ ---
1434
+
1435
+ <a id="wc-form"></a>
1436
+
1437
+ ## `hb-form` — form
1438
+
1439
+ **Category:** forms
1440
+ **Tags:** forms
1441
+
1442
+ ### What it does
1443
+
1444
+ JSON `schema`-driven form engine: each entry’s `type` maps to an `hb-input-*` web component (text, select, date, file, arrays, coords, etc.) or layout `row`. Handles grouping, conditional visibility, validation messages, disabled state, and dispatches rich `update` payloads (field values + `_valid`) plus submit lifecycle events for programmatic backends.
1445
+
1446
+ ### Custom element
1447
+
1448
+ `hb-form`
1449
+
1450
+ ### Attributes (snake_case; use string values in HTML)
1451
+
1452
+ - `id` — optional string
1453
+ - `style` — optional string
1454
+ - `schema` — required string (JSON array of field definitions: `type`, `id`, `label`, `value`, `required`, `params`, `dependencies`, etc.)
1455
+ - `submitted` — optional `"yes"` | `"no"` | null
1456
+ - `getvals` — optional `"yes"` | `"no"` | null (trigger read values)
1457
+ - `show_validation` — optional `"yes"` | `"no"`
1458
+ - `hide_submit` — optional boolean
1459
+ - `i18nlang` — optional string (`en`, `it`, …)
1460
+
1461
+ ### Events
1462
+
1463
+ - `submit` — submitted values as `Record<string, …>` plus `_valid`, `_id`
1464
+ - `getValues` — `{ _valid: boolean; values: Record<string, …> }`
1465
+ - `update` — `{ _valid: boolean; _id: string; values: Record<string, …> }`
1466
+
1467
+ ### Usage notes
1468
+
1469
+ `schema` is the primary API; pass it as a single JSON string on the element. Slots: `submit_button`, `submit_label`, `other_buttons`. Supports i18n via `i18nlang`.
1470
+
1471
+ ### Minimal HTML example
1472
+
1473
+ ```html
1474
+ <hb-form
1475
+ schema="[{&quot;type&quot;:&quot;text&quot;,&quot;id&quot;:&quot;name&quot;,&quot;label&quot;:&quot;Name&quot;,&quot;required&quot;:true}]"
1476
+ show_validation="no"
1477
+ submitted="no"
1478
+ ></hb-form>
1479
+ ```
1480
+
1481
+ ---
1482
+
1483
+ <a id="wc-form-composer"></a>
1484
+
1485
+ ## `hb-form-composer` — form-composer
1486
+
1487
+ **Category:** forms
1488
+ **Tags:** forms, builder
1489
+
1490
+ ### What it does
1491
+
1492
+ Visual form-schema builder: internal `hb-form` defines field types, validation flags, and options, mirrored into an `hb-table` preview and editable via `hb-dialogform`. Accumulates `output_schema` as the composed `hb-form` schema array and emits `done` when the schema is finalized (e.g. via the UI save action).
1493
+
1494
+ ### Custom element
1495
+
1496
+ `hb-form-composer`
1497
+
1498
+ ### Attributes (snake_case; use string values in HTML)
1499
+
1500
+ - `id` — optional string
1501
+ - `style` — optional string
1502
+ - `debug` — optional boolean (string in HTML)
1503
+ - `output_schema` — optional string (JSON array of generator field descriptors; seed or inspect composed schema)
1504
+
1505
+ ### Events
1506
+
1507
+ - `done` — `{ schema: any; id: string }`
1508
+
1509
+ ### Usage notes
1510
+
1511
+ Uses nested `hb-form`, `hb-table`, and `hb-dialogform`. `output_schema` mirrors the live composed schema suitable for `hb-form`.
1512
+
1513
+ ### Minimal HTML example
1514
+
1515
+ ```html
1516
+ <hb-form-composer debug="no"></hb-form-composer>
1517
+ ```
1518
+
1519
+ ---
1520
+
1521
+ <a id="wc-form-contact"></a>
1522
+
1523
+ ## `hb-form-contact` — form-contact
1524
+
1525
+ **Category:** forms
1526
+ **Tags:** forms, contact
1527
+
1528
+ ### What it does
1529
+
1530
+ Opinionated contact form: JSON `informations` toggles and labels fields (name, email, phone, subject, message, etc.) and builds the `hb-form` schema at runtime, including privacy-policy checkbox from `privacy_policy`. Optional `captcha` config embeds `hb-captcha-google-recaptcha-v2-invisible` before submit; success UI uses Svelte transitions.
1531
+
1532
+ ### Custom element
1533
+
1534
+ `hb-form-contact`
1535
+
1536
+ ### Attributes (snake_case; use string values in HTML)
1537
+
1538
+ - `id` — optional string
1539
+ - `style` — optional string
1540
+ - `informations` — optional string (JSON: which fields exist and their `required`, `label`, `placeholder`, `value`)
1541
+ - `privacy_policy` — optional string (JSON: `input`, `link?`, `policyId?`, `required?`)
1542
+ - `captcha` — optional string (JSON: `type` `googlev_recaptchav2_invisible` | `googlev_recaptchav3`, `siteKey`)
1543
+
1544
+ ### Events
1545
+
1546
+ - `formContactSubmit` — `{ _valid: boolean; values: Record<string, string | number | boolean> }`
1547
+ - `formContactSubmitWithCaptcha` — same as above plus `response: string`
1548
+
1549
+ ### Usage notes
1550
+
1551
+ CSS part: `container`. Bootstrap theme variables apply via component styles.
1552
+
1553
+ ### Minimal HTML example
1554
+
1555
+ ```html
1556
+ <hb-form-contact
1557
+ informations="{&quot;email&quot;:{&quot;required&quot;:true},&quot;message&quot;:{}}"
1558
+ privacy_policy="{&quot;input&quot;:&quot;I agree&quot;,&quot;required&quot;:true}"
1559
+ ></hb-form-contact>
1560
+ ```
1561
+
1562
+ ---
1563
+
1564
+ <a id="wc-funnel"></a>
1565
+
1566
+ ## `hb-funnel` — funnel
1567
+
1568
+ **Category:** forms
1569
+ **Tags:** forms, multistep
1570
+
1571
+ ### What it does
1572
+
1573
+ Multi-step funnel over stacked `hb-form` instances: JSON `schemes` supplies one schema per step (or derive step count from `steps`), tracks per-step validity, merges values as the user advances, and optionally shows a final submit step when `submitstep` is `yes`. Dispatches step navigation and aggregated form updates for the active index.
1574
+
1575
+ ### Custom element
1576
+
1577
+ `hb-funnel`
1578
+
1579
+ ### Attributes (snake_case; use string values in HTML)
1580
+
1581
+ - `id` — optional string
1582
+ - `style` — optional string
1583
+ - `schemes` — required string (JSON array of `hb-form`-compatible schemas, one per step)
1584
+ - `steps` — optional number (string in HTML)
1585
+ - `step` — optional number (current step index; string in HTML)
1586
+ - `submitstep` — optional `"yes"` | `"no"` (final submit step)
1587
+
1588
+ ### Events
1589
+
1590
+ - `update` — `{ step: number; scheme: { schema; valid }; valid: boolean }`
1591
+ - `submit` — `{ schemes: { schema; valid }[]; steps: number; step: number }`
1592
+
1593
+ ### Usage notes
1594
+
1595
+ Each entry in `schemes` is a full form schema array like `hb-form`’s `schema`. CSS part: `invalid-feedback` (from inner form styling).
1596
+
1597
+ ### Minimal HTML example
1598
+
1599
+ ```html
1600
+ <hb-funnel
1601
+ submitstep="yes"
1602
+ schemes="[[{&quot;type&quot;:&quot;text&quot;,&quot;id&quot;:&quot;name&quot;,&quot;label&quot;:&quot;Name&quot;,&quot;required&quot;:true}]]"
1603
+ ></hb-funnel>
1604
+ ```
1605
+
1606
+ ---
1607
+
1608
+ <a id="wc-gallery-video"></a>
1609
+
1610
+ ## `hb-gallery-video` — gallery-video
1611
+
1612
+ **Category:** media
1613
+ **Tags:** media, video, gallery
1614
+
1615
+ ### What it does
1616
+
1617
+ Paginated grid of `hb-card-video` tiles built from JSON `cards`, with `hb-paginate` for page/size and optional text or date-range filtering (`initialdate`/`lastdate`, `filter`, `externalfilter`). Passes date format, link label, and primary color into each card; listens to paginator events to sync `page`/`pages` and emits host events for paging and filters.
1618
+
1619
+ ### Custom element
1620
+
1621
+ `hb-gallery-video`
1622
+
1623
+ ### Attributes (snake_case; use string values in HTML)
1624
+
1625
+ - `id` — optional string
1626
+ - `style` — optional string
1627
+ - `cards` — required string (JSON array: `videoSrc`, `title?`, `time?`, `provider?`, `dateformat?`, …)
1628
+ - `size` — optional number (items per page; string in HTML)
1629
+ - `page` — optional number (0-based; string in HTML)
1630
+ - `pages` — optional number (total pages when using external filter; string in HTML)
1631
+ - `link_label` — optional string
1632
+ - `dateformat` — optional string (day.js format)
1633
+ - `primarycolor` — optional string
1634
+ - `filter` — optional string (text filter)
1635
+ - `externalfilter` — optional string (truthy enables external pagination/filter behavior)
1636
+ - `disabletextfilter` — optional `"yes"` to disable text filter UI
1637
+ - `initialdate` — optional (ISO/date string when passed from host)
1638
+ - `lastdate` — optional (ISO/date string when passed from host)
1639
+
1640
+ ### Events
1641
+
1642
+ - `pageChange` — `{ page: number; cards: ICard[] }`
1643
+ - `textFilterVideos` — `{ filter?: string }` (when `externalfilter` is set and filter changes)
1644
+ - `dateFilterVideos` — `{ start?: Date; end?: Date; dateKey: string }`
1645
+
1646
+ ### Usage notes
1647
+
1648
+ CSS part: `container`. Registers `hb-paginate` and `hb-card-video`. `cards` must be valid JSON on the attribute.
1649
+
1650
+ ### Minimal HTML example
1651
+
1652
+ ```html
1653
+ <hb-gallery-video
1654
+ cards="[{&quot;title&quot;:&quot;Clip&quot;,&quot;videoSrc&quot;:&quot;https://example.com/video.mp4&quot;}]"
1655
+ size="12"
1656
+ page="0"
1657
+ ></hb-gallery-video>
1658
+ ```
1659
+
1660
+ ---
1661
+
1662
+ <a id="wc-gauge"></a>
1663
+
1664
+ ## `hb-gauge` — gauge
1665
+
1666
+ **Category:** data
1667
+ **Tags:** data, chart
1668
+
1669
+ ### What it does
1670
+
1671
+ SVG gauge wrapper around JustGage: pass JustGage-compatible options as JSON (`value`, min/max, labels, colors, etc.). The gauge is created on the shadow host after mount, destroyed on teardown, and recreated when `options` changes or the window resizes (debounced) so it stays sized correctly.
1672
+
1673
+ ### Custom element
1674
+
1675
+ `hb-gauge`
1676
+
1677
+ ### Attributes (snake_case; use string values in HTML)
1678
+
1679
+ - `id` — optional string
1680
+ - `style` — optional string
1681
+ - `options` — required string (JSON object; at minimum `value`, `min`, `max`; additional keys follow JustGage)
1682
+
1683
+ ### Events
1684
+
1685
+ None declared on the component type.
1686
+
1687
+ ### Usage notes
1688
+
1689
+ CSS part: `gauge`. `options` may be passed as a JSON string; the component parses it when needed.
1690
+
1691
+ ### Minimal HTML example
1692
+
1693
+ ```html
1694
+ <hb-gauge
1695
+ options="{&quot;value&quot;:50,&quot;min&quot;:0,&quot;max&quot;:100}"
1696
+ ></hb-gauge>
1697
+ ```
1698
+
1699
+ ---
1700
+
1701
+ <a id="wc-input-area"></a>
1702
+
1703
+ ## `hb-input-area` — input-area
1704
+
1705
+ **Category:** inputs
1706
+ **Tags:** inputs
1707
+
1708
+ ### What it does
1709
+
1710
+ Multi-line `<textarea>` controlled by `schemaentry` with the same validation ideas as text: optional `validationRegex` and `params` min/max length, required handling, and `show_validation` / `validationTip`. Dispatches `setVal` with `{ value, valid, id }` and `clickEnter` when Enter is pressed without Shift (Shift+Enter still inserts a newline).
1711
+
1712
+ ### Custom element
1713
+
1714
+ `hb-input-area`
1715
+
1716
+ ### Attributes (snake_case; use string values in HTML)
1717
+
1718
+ - `id` — optional string
1719
+ - `style` — optional string
1720
+ - `schemaentry` — required string (JSON: `id`, `label?`, `placeholder?`, `required?`, `value?`, `validationTip?`, `validationRegex?`, `params?`)
1721
+ - `show_validation` — optional `"yes"` | `"no"`
1722
+
1723
+ ### Events
1724
+
1725
+ - `setVal` — `{ value: string; valid: boolean; id: string }`
1726
+ - `clickEnter` — `{ value: string; valid: boolean; id?: string }`
1727
+
1728
+ ### Usage notes
1729
+
1730
+ CSS parts: `invalid-feedback`, `input`. Nested `schemaentry` fields follow the shared form-schema shape used by `hb-form`.
1731
+
1732
+ ### Minimal HTML example
1733
+
1734
+ ```html
1735
+ <hb-input-area
1736
+ schemaentry="{&quot;id&quot;:&quot;notes&quot;,&quot;label&quot;:&quot;Notes&quot;,&quot;placeholder&quot;:&quot;Type here…&quot;}"
1737
+ show_validation="no"
1738
+ ></hb-input-area>
1739
+ ```
1740
+
1741
+ ---
1742
+
1743
+ <a id="wc-input-array-objects"></a>
1744
+
1745
+ ## `hb-input-array-objects` — input-array-objects
1746
+
1747
+ **Category:** inputs
1748
+ **Tags:** inputs
1749
+
1750
+ ### What it does
1751
+
1752
+ Repeating records editor: `hb-table` lists existing rows (with delete actions), and `hb-form` renders the next row from `schemaentry.params.schema`; submitting appends to the array and updates the table. Registers `hb-form` and `hb-table`; optional `add-object-label` slot customizes the add button. Dispatches `setVal` with the objects array, `valid`, and `id`, and shows `validationTip` when `show_validation` is enabled.
1753
+
1754
+ ### Custom element
1755
+
1756
+ `hb-input-array-objects`
1757
+
1758
+ ### Attributes (snake_case; use string values in HTML)
1759
+
1760
+ - `id` — optional string
1761
+ - `style` — optional string
1762
+ - `schemaentry` — required string (JSON: `id`, `params.schema` as nested form schema, optional `value` as row array with `_objId`, `validationTip?`, `required?`, …)
1763
+ - `show_validation` — optional `"yes"` | `"no"`
1764
+
1765
+ ### Events
1766
+
1767
+ - `setVal` — `{ value: string; valid: boolean; id: string }` (payload `value` is the serialized array/object representation used by the component)
1768
+
1769
+ ### Usage notes
1770
+
1771
+ CSS part: `properties-container`. Slot: `add-object-label`.
1772
+
1773
+ ### Minimal HTML example
1774
+
1775
+ ```html
1776
+ <hb-input-array-objects
1777
+ schemaentry="{&quot;id&quot;:&quot;people&quot;,&quot;params&quot;:{&quot;schema&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;id&quot;:&quot;name&quot;,&quot;label&quot;:&quot;Name&quot;}]}}"
1778
+ show_validation="no"
1779
+ ></hb-input-array-objects>
1780
+ ```
1781
+
1782
+ ---
1783
+
1784
+ <a id="wc-input-array-tags"></a>
1785
+
1786
+ ## `hb-input-array-tags` — input-array-tags
1787
+
1788
+ **Category:** inputs
1789
+ **Tags:** inputs
1790
+
1791
+ ### What it does
1792
+
1793
+ Tag list stored as objects `{ id, label }` (optional per-tag `colorVarName`); users add tags via free text or a dropdown from `params.availableTags`, with optional `freeTag` and `_custom` flow, removable badges when `allowRemove` is set, and styling via `params.colorVarName` or the `add-tag-label` slot. Dispatches `setVal` with the array `value`, `valid`, and `id`.
1794
+
1795
+ ### Custom element
1796
+
1797
+ `hb-input-array-tags`
1798
+
1799
+ ### Attributes (snake_case; use string values in HTML)
1800
+
1801
+ - `id` — optional string
1802
+ - `style` — optional string
1803
+ - `schemaentry` — required string (JSON: `id`, `params` with `availableTags?`, `freeTag?`, `allowRemove?`, `colorVarName?`, `addTagLabel?`, optional `value` as tag array)
1804
+ - `show_validation` — optional `"yes"` | `"no"`
1805
+
1806
+ ### Events
1807
+
1808
+ - `setVal` — `{ value: string; valid: boolean; id: string }` (tag list is serialized for the custom event payload)
1809
+
1810
+ ### Usage notes
1811
+
1812
+ Optional slot name in docs: `add-tag-label` for the add control label.
1813
+
1814
+ ### Minimal HTML example
1815
+
1816
+ ```html
1817
+ <hb-input-array-tags
1818
+ schemaentry="{&quot;id&quot;:&quot;tags&quot;,&quot;params&quot;:{&quot;freeTag&quot;:true,&quot;allowRemove&quot;:true}}"
1819
+ show_validation="no"
1820
+ ></hb-input-array-tags>
1821
+ ```
1822
+
1823
+ ---
1824
+
1825
+ <a id="wc-input-checkbox"></a>
1826
+
1827
+ ## `hb-input-checkbox` — input-checkbox
1828
+
1829
+ **Category:** inputs
1830
+ **Tags:** inputs
1831
+
1832
+ ### What it does
1833
+
1834
+ Checkbox or, when `schemaentry.params.type` is `switch`, a Bootstrap switch, labeled from `schemaentry.label` with a required asterisk when needed. Boolean `value` is parsed from stringified `schemaentry`; required fields must be checked to be valid. Dispatches `setVal` with `{ value, valid, id }` and can show `validationTip` under `show_validation`.
1835
+
1836
+ ### Custom element
1837
+
1838
+ `hb-input-checkbox`
1839
+
1840
+ ### Attributes (snake_case; use string values in HTML)
1841
+
1842
+ - `id` — optional string
1843
+ - `style` — optional string
1844
+ - `schemaentry` — required string (JSON: `id`, `label?`, `required?`, `value?`, `validationTip?`, `params.type` optional `"switch"`, …)
1845
+ - `show_validation` — optional `"yes"` | `"no"`
1846
+
1847
+ ### Events
1848
+
1849
+ - `setVal` — `{ value: string; valid: boolean; id: string }`
1850
+
1851
+ ### Usage notes
1852
+
1853
+ CSS part: `invalid-feedback`.
1854
+
1855
+ ### Minimal HTML example
1856
+
1857
+ ```html
1858
+ <hb-input-checkbox
1859
+ schemaentry="{&quot;id&quot;:&quot;accept&quot;,&quot;label&quot;:&quot;I agree&quot;,&quot;required&quot;:true}"
1860
+ show_validation="no"
1861
+ ></hb-input-checkbox>
1862
+ ```
1863
+
1864
+ ---
1865
+
1866
+ <a id="wc-input-color"></a>
1867
+
1868
+ ## `hb-input-color` — input-color
1869
+
1870
+ **Category:** inputs
1871
+ **Tags:** inputs
1872
+
1873
+ ### What it does
1874
+
1875
+ Color input that normalizes named HTML colors and `rgb(...)` strings into a hex value for the native picker, with debounced syncing back to the bound value. Driven by `schemaentry` (including required and optional `validationTip` with `show_validation`). Dispatches `setVal` with the string `value`, `valid`, and `id`.
1876
+
1877
+ ### Custom element
1878
+
1879
+ `hb-input-color`
1880
+
1881
+ ### Attributes (snake_case; use string values in HTML)
1882
+
1883
+ - `id` — optional string
1884
+ - `style` — optional string
1885
+ - `schemaentry` — required string (JSON: `id`, `label?`, `required?`, `value?`, `validationTip?`, `placeholder?`, …)
1886
+ - `show_validation` — optional `"yes"` | `"no"`
1887
+
1888
+ ### Events
1889
+
1890
+ - `setVal` — `{ value: string; valid: boolean; id: string }`
1891
+
1892
+ ### Usage notes
1893
+
1894
+ CSS part: `invalid-feedback`.
1895
+
1896
+ ### Minimal HTML example
1897
+
1898
+ ```html
1899
+ <hb-input-color
1900
+ schemaentry="{&quot;id&quot;:&quot;accent&quot;,&quot;required&quot;:true,&quot;value&quot;:&quot;#07689f&quot;}"
1901
+ show_validation="no"
1902
+ ></hb-input-color>
1903
+ ```
1904
+
1905
+ ---
1906
+
1907
+ <a id="wc-input-coords"></a>
1908
+
1909
+ ## `hb-input-coords` — input-coords
1910
+
1911
+ **Category:** inputs
1912
+ **Tags:** inputs, maps
1913
+
1914
+ ### What it does
1915
+
1916
+ Latitude/longitude editor that embeds `hb-map` (marker and map `source` / `options` from `schemaentry.params`) and two `hb-input-number` fields, with labels translated via optional `i18nlang`. Supports initial `value` and `params` such as `zoom` and `center`. Registers `hb-map` and `hb-input-number` and dispatches `setVal` with `{ lat, lon }` as `value`, plus `valid` and `id`.
1917
+
1918
+ ### Custom element
1919
+
1920
+ `hb-input-coords`
1921
+
1922
+ ### Attributes (snake_case; use string values in HTML)
1923
+
1924
+ - `id` — optional string
1925
+ - `style` — optional string
1926
+ - `schemaentry` — required string (JSON: `id`, `label?`, `required?`, `value` as `{ lat, lon }`, `validationTip?`, `params` for map/zoom/center/labels/placeholders)
1927
+ - `show_validation` — optional `"yes"` | `"no"`
1928
+ - `i18nlang` — optional string
1929
+
1930
+ ### Events
1931
+
1932
+ - `setVal` — `{ value: { lat: number; lon: number }; valid: boolean; id: string }`
1933
+
1934
+ ### Usage notes
1935
+
1936
+ CSS part: `invalid-feedback`. Ensure map-related `params` match your deployment (tiles/source).
1937
+
1938
+ ### Minimal HTML example
1939
+
1940
+ ```html
1941
+ <hb-input-coords
1942
+ schemaentry="{&quot;id&quot;:&quot;loc&quot;,&quot;required&quot;:true,&quot;value&quot;:{&quot;lat&quot;:45.4,&quot;lon&quot;:9.2}}"
1943
+ show_validation="no"
1944
+ ></hb-input-coords>
1945
+ ```
1946
+
1947
+ ---
1948
+
1949
+ <a id="wc-input-date"></a>
1950
+
1951
+ ## `hb-input-date` — input-date
1952
+
1953
+ **Category:** inputs
1954
+ **Tags:** inputs
1955
+
1956
+ ### What it does
1957
+
1958
+ Native date input bound to `schemaentry` (string JSON or object), with optional `params.min` / `max` compared as `Date` values when the field is required. Shows Bootstrap validation and `validationTip` when `show_validation` is on. Dispatches `setVal` with the string date `value`, `valid`, and `id`, and `clickEnter` if the user presses Enter.
1959
+
1960
+ ### Custom element
1961
+
1962
+ `hb-input-date`
1963
+
1964
+ ### Attributes (snake_case; use string values in HTML)
1965
+
1966
+ - `id` — optional string
1967
+ - `style` — optional string
1968
+ - `schemaentry` — required string (JSON: `id`, `label?`, `required?`, `value?` as ISO date string, `validationTip?`, `params.min` / `params.max` as ISO strings, …)
1969
+ - `show_validation` — optional `"yes"` | `"no"`
1970
+
1971
+ ### Events
1972
+
1973
+ - `setVal` — `{ value: string; valid: boolean; id: string }`
1974
+ - `clickEnter` — `{ value: string; valid: boolean; id?: string }`
1975
+
1976
+ ### Usage notes
1977
+
1978
+ CSS part: `invalid-feedback`.
1979
+
1980
+ ### Minimal HTML example
1981
+
1982
+ ```html
1983
+ <hb-input-date
1984
+ schemaentry="{&quot;id&quot;:&quot;birth&quot;,&quot;label&quot;:&quot;Birth date&quot;,&quot;required&quot;:true}"
1985
+ show_validation="no"
1986
+ ></hb-input-date>
1987
+ ```
1988
+
1989
+ ---
1990
+
1991
+ <a id="wc-input-datetime"></a>
1992
+
1993
+ ## `hb-input-datetime` — input-datetime
1994
+
1995
+ **Category:** inputs
1996
+ **Tags:** inputs
1997
+
1998
+ ### What it does
1999
+
2000
+ Composes `hb-input-date` and `hb-input-number` to edit date, hours, minutes, and (unless `params.removeSeconds`) seconds, then combines them into a single ISO string `value`. Honors `schemaentry.params.min` / `max` as date bounds when required. Registers `hb-input-date` and `hb-input-number` and dispatches `setVal` with `{ value, valid, id }`.
2001
+
2002
+ ### Custom element
2003
+
2004
+ `hb-input-datetime`
2005
+
2006
+ ### Attributes (snake_case; use string values in HTML)
2007
+
2008
+ - `id` — optional string
2009
+ - `style` — optional string
2010
+ - `schemaentry` — required string (JSON: `id`, `label?`, `required?`, `value?` as ISO datetime string, `validationTip?`, `params.removeSeconds?`, `params.min` / `params.max`, …)
2011
+ - `show_validation` — optional `"yes"` | `"no"`
2012
+
2013
+ ### Events
2014
+
2015
+ - `setVal` — `{ value: string; valid: boolean; id: string }`
2016
+
2017
+ ### Usage notes
2018
+
2019
+ No CSS parts declared in style setup; child inputs carry their own parts. Child components must be registered in the bundle.
2020
+
2021
+ ### Minimal HTML example
2022
+
2023
+ ```html
2024
+ <hb-input-datetime
2025
+ schemaentry="{&quot;id&quot;:&quot;starts_at&quot;,&quot;label&quot;:&quot;Start&quot;,&quot;required&quot;:true,&quot;params&quot;:{&quot;removeSeconds&quot;:true}}"
2026
+ show_validation="no"
2027
+ ></hb-input-datetime>
2028
+ ```
2029
+
2030
+ ---
2031
+
2032
+ <a id="wc-input-email"></a>
2033
+
2034
+ # hb-input-email
2035
+
2036
+ ## Description
2037
+
2038
+ `type="email"` field using `schemaentry` for id, value, placeholder, readonly, and required, with extra checks for a sensible address shape plus optional `validationRegex` and `params` min/max length. Use `show_validation` for Bootstrap states and `validationTip`. Dispatches `setVal` on updates and `clickEnter` when Enter is pressed.
2039
+
2040
+ ## Types
2041
+
2042
+ ```typescript
2043
+ export type FormSchemaEntry = {
2044
+ /**
2045
+ * This will be both the key of the object when submitting the form's data,
2046
+ * and also the id in the DOM.
2047
+ */
2048
+ id: string;
2049
+
2050
+ /**
2051
+ * The descriptive label that will show alongside the form control.
2052
+ */
2053
+ label?: string;
2054
+
2055
+ /**
2056
+ * Optional default value.
2057
+ */
2058
+ value?: string | number | boolean;
2059
+
2060
+ readonly?: boolean;
2061
+
2062
+ /**
2063
+ * This doesn't matter if the dependencies requirements aren't met.
2064
+ */
2065
+ required?: boolean;
2066
+
2067
+ validationRegex?: string;
2068
+ /**
2069
+ * Shows if value is not valid.
2070
+ */
2071
+ validationTip?: string;
2072
+
2073
+ placeholder?: string;
2074
+
2075
+ /**
2076
+ * Other parameters that may be specific to a certain kind of form control.
2077
+ */
2078
+ params?: Record<string, any>;
2079
+ };
2080
+
2081
+ export type Component = {
2082
+ id?: string;
2083
+ style?: string;
2084
+
2085
+ show_validation?: "yes" | "no";
2086
+ schemaentry: FormSchemaEntry;
2087
+ };
2088
+
2089
+ export type Events = {
2090
+ setVal: { value: string; valid: boolean; id: string };
2091
+ clickEnter: { value: string; valid: boolean; id?: string };
2092
+ };
2093
+ ```
2094
+
2095
+ ---
2096
+
2097
+ <a id="wc-input-file"></a>
2098
+
2099
+ # hb-input-file
2100
+
2101
+ ## Description
2102
+
2103
+ File picker with `accept` from `schemaentry.params.accept` (defaults to any file), optional image preview or Bootstrap Icons by MIME type, and an optional clickable `placeHolderImage` that opens the hidden input. Clears selection with the remove control; validates required fields against an actual chosen file. Dispatches `setVal` with `{ value, valid, id }`.
2104
+
2105
+ ## Types
2106
+
2107
+ ```typescript
2108
+ export type FormSchemaEntry = {
2109
+ /**
2110
+ * This will be both the key of the object when submitting the form's data,
2111
+ * and also the id in the DOM.
2112
+ */
2113
+ id: string;
2114
+
2115
+ /**
2116
+ * The descriptive label that will show alongside the form control.
2117
+ */
2118
+ label?: string;
2119
+
2120
+ /**
2121
+ * Optional default value.
2122
+ */
2123
+ value?: string | number | boolean;
2124
+
2125
+ readonly?: boolean;
2126
+
2127
+ /**
2128
+ * This doesn't matter if the dependencies requirements aren't met.
2129
+ */
2130
+ required?: boolean;
2131
+
2132
+ validationRegex?: string;
2133
+ /**
2134
+ * Shows if value is not valid.
2135
+ */
2136
+ validationTip?: string;
2137
+
2138
+ placeholder?: string;
2139
+
2140
+ /**
2141
+ * Other parameters that may be specific to a certain kind of form control.
2142
+ */
2143
+ params?: Record<string, any>;
2144
+ };
2145
+
2146
+ export type Component = {
2147
+ id?: string;
2148
+ style?: string;
2149
+
2150
+ show_validation?: "yes" | "no";
2151
+ schemaentry: FormSchemaEntry;
2152
+ };
2153
+
2154
+ export type Events = { setVal: { value: string; valid: boolean; id: string } };
2155
+ ```
2156
+
2157
+ ---
2158
+
2159
+ <a id="wc-input-number"></a>
2160
+
2161
+ # hb-input-number
2162
+
2163
+ ## Description
2164
+
2165
+ Numeric input with optional `min` / `max` from `schemaentry.params` (native attributes are omitted when bounds are not set). Validates required fields and range when both ends are defined; with no min/max it still dispatches `clickEnter` on Enter. Emits `setVal` with `{ value, valid, id }` and supports `show_validation` plus `validationTip`.
2166
+
2167
+ ## Types
2168
+
2169
+ ```typescript
2170
+ export type FormSchemaEntry = {
2171
+ /**
2172
+ * This will be both the key of the object when submitting the form's data,
2173
+ * and also the id in the DOM.
2174
+ */
2175
+ id: string;
2176
+
2177
+ /**
2178
+ * The descriptive label that will show alongside the form control.
2179
+ */
2180
+ label?: string;
2181
+
2182
+ /**
2183
+ * Optional default value.
2184
+ */
2185
+ value?: number;
2186
+
2187
+ readonly?: boolean;
2188
+
2189
+ /**
2190
+ * This doesn't matter if the dependencies requirements aren't met.
2191
+ */
2192
+ required?: boolean;
2193
+
2194
+ validationRegex?: string;
2195
+ /**
2196
+ * Shows if value is not valid.
2197
+ */
2198
+ validationTip?: string;
2199
+
2200
+ placeholder?: string;
2201
+
2202
+ /**
2203
+ * Other parameters that may be specific to a certain kind of form control.
2204
+ */
2205
+ params?: Record<string, any>;
2206
+ };
2207
+
2208
+ export type Component = {
2209
+ id?: string;
2210
+ style?: string;
2211
+ show_validation?: "yes" | "no";
2212
+ schemaentry: FormSchemaEntry | undefined;
2213
+ };
2214
+
2215
+ export type Events = {
2216
+ setVal: { value: number; valid: boolean; id: string };
2217
+ clickEnter: { value: string; valid: boolean; id?: string };
2218
+ };
2219
+ ```
2220
+
2221
+ ---
2222
+
2223
+ <a id="wc-input-radio"></a>
2224
+
2225
+ # hb-input-radio
2226
+
2227
+ ## Description
2228
+
2229
+ Radio group built from `schemaentry.params.options` with a shared `name` derived from the field id. Parses JSON `schemaentry` for initial `value` and supports required validation with optional Bootstrap feedback via `show_validation` and `validationTip`. Dispatches `setVal` with the selected string `value`, `valid`, and `id` whenever the choice changes.
2230
+
2231
+ ## Types
2232
+
2233
+ ```typescript
2234
+ export type FormSchemaEntry = {
2235
+ /**
2236
+ * This will be both the key of the object when submitting the form's data,
2237
+ * and also the id in the DOM.
2238
+ */
2239
+ id: string;
2240
+
2241
+ /**
2242
+ * The descriptive label that will show alongside the form control.
2243
+ */
2244
+ label?: string;
2245
+
2246
+ /**
2247
+ * Optional default value.
2248
+ */
2249
+ value?: string | number | boolean;
2250
+
2251
+ readonly?: boolean;
2252
+
2253
+ /**
2254
+ * This doesn't matter if the dependencies requirements aren't met.
2255
+ */
2256
+ required?: boolean;
2257
+
2258
+ validationRegex?: string;
2259
+ /**
2260
+ * Shows if value is not valid.
2261
+ */
2262
+ validationTip?: string;
2263
+
2264
+ placeholder?: string;
2265
+
2266
+ /**
2267
+ * Other parameters that may be specific to a certain kind of form control.
2268
+ */
2269
+ params?: Record<string, any>;
2270
+ };
2271
+
2272
+ export type Component = {
2273
+ id?: string;
2274
+ style?: string;
2275
+
2276
+ show_validation?: "yes" | "no";
2277
+ schemaentry: FormSchemaEntry | undefined;
2278
+ };
2279
+
2280
+ export type Events = {
2281
+ setVal: { value: string; valid: boolean; id: string };
2282
+ };
2283
+ ```
2284
+
2285
+ ---
2286
+
2287
+ <a id="wc-input-range"></a>
2288
+
2289
+ # hb-input-range
2290
+
2291
+ ## Description
2292
+
2293
+ Range slider (`type="range"`) whose bounds come from `schemaentry.params.min` and/or `max` when present. Parses stringified `schemaentry` when needed and enforces required/min/max rules for the numeric value. Dispatches `setVal` continuously with `{ value, valid, id }` and can show `validationTip` when `show_validation` is enabled.
2294
+
2295
+ ## Types
2296
+
2297
+ ```typescript
2298
+ export type FormSchemaEntry = {
2299
+ /**
2300
+ * This will be both the key of the object when submitting the form's data,
2301
+ * and also the id in the DOM.
2302
+ */
2303
+ id: string;
2304
+
2305
+ /**
2306
+ * The descriptive label that will show alongside the form control.
2307
+ */
2308
+ label?: string;
2309
+
2310
+ /**
2311
+ * Optional default value.
2312
+ */
2313
+ value?: number;
2314
+
2315
+ readonly?: boolean;
2316
+
2317
+ /**
2318
+ * This doesn't matter if the dependencies requirements aren't met.
2319
+ */
2320
+ required?: boolean;
2321
+
2322
+ validationRegex?: string;
2323
+ /**
2324
+ * Shows if value is not valid.
2325
+ */
2326
+ validationTip?: string;
2327
+
2328
+ placeholder?: string;
2329
+
2330
+ /**
2331
+ * Other parameters that may be specific to a certain kind of form control.
2332
+ */
2333
+ params?: Record<string, any>;
2334
+ };
2335
+
2336
+ export type Component = {
2337
+ id?: string;
2338
+ style?: string;
2339
+
2340
+ show_validation?: "yes" | "no";
2341
+ schemaentry: FormSchemaEntry | undefined;
2342
+ };
2343
+
2344
+ export type Events = {
2345
+ setVal: { value: string; valid: boolean; id: string };
2346
+ };
2347
+ ```
2348
+
2349
+ ---
2350
+
2351
+ <a id="wc-input-select"></a>
2352
+
2353
+ # hb-input-select
2354
+
2355
+ ## Description
2356
+
2357
+ Native `<select>` bound to `schemaentry` options from `params.options` (each option has `id`, `value`, and optional `label`). Supports JSON string or object `schemaentry`, optional required state, and `show_validation` for Bootstrap `is-valid` / `is-invalid` classes plus `validationTip`. Dispatches `setVal` with `{ value, valid, id }` on every change.
2358
+
2359
+ ## Types
2360
+
2361
+ ```typescript
2362
+ export type FormSchemaEntry = {
2363
+ /**
2364
+ * This will be both the key of the object when submitting the form's data,
2365
+ * and also the id in the DOM.
2366
+ */
2367
+ id: string;
2368
+
2369
+ /**
2370
+ * The descriptive label that will show alongside the form control.
2371
+ */
2372
+ label?: string;
2373
+
2374
+ /**
2375
+ * Optional default value.
2376
+ */
2377
+ value?: string | number | boolean;
2378
+
2379
+ readonly?: boolean;
2380
+
2381
+ /**
2382
+ * This doesn't matter if the dependencies requirements aren't met.
2383
+ */
2384
+ required?: boolean;
2385
+
2386
+ validationRegex?: string;
2387
+ /**
2388
+ * Shows if value is not valid.
2389
+ */
2390
+ validationTip?: string;
2391
+
2392
+ placeholder?: string;
2393
+
2394
+ /**
2395
+ * Other parameters that may be specific to a certain kind of form control.
2396
+ */
2397
+ params?: Record<string, any>;
2398
+ };
2399
+
2400
+ export type Component = {
2401
+ id?: string;
2402
+ style?: string;
2403
+
2404
+ show_validation?: "yes" | "no";
2405
+ schemaentry: FormSchemaEntry | undefined;
2406
+ };
2407
+
2408
+ export type Events = {
2409
+ setVal: { value: string; valid: boolean; id: string };
2410
+ };
2411
+ ```
2412
+
2413
+ ---
2414
+
2415
+ <a id="wc-input-text"></a>
2416
+
2417
+ # hb-input-text
2418
+
2419
+ ## Description
2420
+
2421
+ Single-line text field driven by a JSON `schemaentry` (id, value, placeholder, readonly, required, optional `validationRegex`, and `params` min/max length). Toggle Bootstrap validation styling with `show_validation`. Dispatches `setVal` whenever the value or validity changes (detail includes `value`, `valid`, `id`), and `clickEnter` when the user presses Enter inside the input.
2422
+
2423
+ ## Types
2424
+
2425
+ ```typescript
2426
+ export type FormSchemaEntry = {
2427
+ /**
2428
+ * This will be both the key of the object when submitting the form's data,
2429
+ * and also the id in the DOM.
2430
+ */
2431
+ id: string;
2432
+
2433
+ /**
2434
+ * Optional default value.
2435
+ */
2436
+ value?: string | number | boolean;
2437
+
2438
+ readonly?: boolean;
2439
+
2440
+ /**
2441
+ * This doesn't matter if the dependencies requirements aren't met.
2442
+ */
2443
+ required?: boolean;
2444
+
2445
+ validationRegex?: string;
2446
+ /**
2447
+ * Shows if value is not valid.
2448
+ */
2449
+ validationTip?: string;
2450
+
2451
+ placeholder?: string;
2452
+
2453
+ /**
2454
+ * Other parameters that may be specific to a certain kind of form control.
2455
+ */
2456
+ params?: Record<string, any>;
2457
+ };
2458
+
2459
+ export type Component = {
2460
+ id?: string;
2461
+ style?: string;
2462
+
2463
+ show_validation?: "yes" | "no";
2464
+ schemaentry: FormSchemaEntry;
2465
+ };
2466
+
2467
+ export type Events = {
2468
+ setVal: { value: string, valid: boolean, id: string };
2469
+ };
2470
+ ```
2471
+
2472
+ ---
2473
+
2474
+ <a id="wc-json-viewer"></a>
2475
+
2476
+ # hb-json-viewer
2477
+
2478
+ ## Description
2479
+
2480
+ Renders JSON as an expandable, syntax-colored tree. Accepts a parsed object or a JSON string and supports initial expand modes (open, closed, or first level only).
2481
+
2482
+ ## Types
2483
+
2484
+ ```typescript
2485
+
2486
+ export type Component = {
2487
+ id?: string;
2488
+ json: any;
2489
+ status?: "open" | "closed" | "first";
2490
+ };
2491
+
2492
+ export type Events = {
2493
+ };
2494
+ ```
2495
+
2496
+ ---
2497
+
2498
+ <a id="wc-layout"></a>
2499
+
2500
+ # hb-layout
2501
+
2502
+ ## Description
2503
+
2504
+ Responsive application shell: below 800px viewport width it mounts the mobile layout; otherwise the desktop layout. Forwards navigation slots, page content, cookie-law options, and layout events from the active child.
2505
+
2506
+ ## Types
2507
+
2508
+ ```typescript
2509
+ import type {
2510
+ IContacts,
2511
+ ISocials,
2512
+ ICompany,
2513
+ IColumn,
2514
+ IPolicies,
2515
+ } from "../../footer/types/webcomponent.type";
2516
+ import type { IUserMenu } from "../../navbar/types/webcomponent.type";
2517
+ import type { INavLink } from "../../sidenav-link/types/webcomponent.type";
2518
+
2519
+ export type Component = {
2520
+ i18nlang?: string;
2521
+ id?: string;
2522
+ style?: string;
2523
+ page_title?: string;
2524
+ socials?: ISocials;
2525
+ contacts?: IContacts;
2526
+ company?: ICompany;
2527
+ navlinks?: INavLink[];
2528
+ pagename?: string;
2529
+ usermenu?: IUserMenu;
2530
+ cookielaw?: string;
2531
+ columns?: IColumn[];
2532
+ onescreen?: boolean;
2533
+ cookielawuri4more?: string;
2534
+ cookielawallowdecline?: boolean;
2535
+ cookielawlanguage?: string;
2536
+ sidebar?: { title?: string; logo?: string; type?: string };
2537
+ footer?: {
2538
+ type?: "auto" | "small" | "regular" | "large";
2539
+ disable_expanding_small?: boolean;
2540
+ };
2541
+ policies?: IPolicies[];
2542
+ heders?: {
2543
+ name?: string;
2544
+ content: string;
2545
+ property?: string;
2546
+ }[];
2547
+ };
2548
+
2549
+ export type Events = {
2550
+ offcanvasswitch: { isOpen: boolean };
2551
+ pageChange: { page: string };
2552
+ navbarDropDownClick: { key: string };
2553
+ footerClick: { elClick: string };
2554
+ navbarSlotClick: { side: "left" | "right" | "center" };
2555
+
2556
+ // layoutStatus: { width: number; size: "large" | "small" };
2557
+ };
2558
+ ```
2559
+
2560
+ ---
2561
+
2562
+ <a id="wc-layout-desktop"></a>
2563
+
2564
+ # hb-layout-desktop
2565
+
2566
+ ## Description
2567
+
2568
+ Desktop layout with top navbar, optional left sidebar (sidebar-desktop) when navigation links are present, main page area, optional cookie-law banner, and footer. Supports one-screen height mode and forwards navigation and footer events.
2569
+
2570
+ ## Types
2571
+
2572
+ ```typescript
2573
+ import type {
2574
+ IContacts,
2575
+ ISocials,
2576
+ ICompany,
2577
+ IColumn,
2578
+ IPolicies,
2579
+ } from "../../footer/types/webcomponent.type";
2580
+ import type { IUserMenu } from "../../navbar/types/webcomponent.type";
2581
+ import type { INavLink } from "../../sidenav-link/types/webcomponent.type";
2582
+
2583
+ export type Component = {
2584
+ i18nlang?: string;
2585
+ id?: string;
2586
+ style?: string;
2587
+ socials?: ISocials;
2588
+ contacts?: IContacts;
2589
+ company?: ICompany;
2590
+ navlinks?: INavLink[];
2591
+ pagename?: string;
2592
+ page_title?: string;
2593
+ usermenu?: IUserMenu;
2594
+ cookielaw?: string;
2595
+ columns?: IColumn[];
2596
+ onescreen?: boolean;
2597
+ cookielawuri4more?: string;
2598
+ cookielawallowdecline?: boolean;
2599
+ cookielawlanguage?: string;
2600
+ sidebar?: { title?: string; logo?: string; type?: string };
2601
+ footer?: {
2602
+ type?: "auto" | "small" | "regular" | "large";
2603
+ disable_expanding_small?: boolean;
2604
+ };
2605
+ policies?: IPolicies[];
2606
+ };
2607
+
2608
+ export type Events = {
2609
+ offcanvasswitch: { isOpen: boolean };
2610
+ pageChange: { page: string };
2611
+ navbarDropDownClick: { key: string };
2612
+ footerClick: { elClick: string };
2613
+ layoutStatus: { width: number; size: "large" | "small" };
2614
+ navbarSlotClick: { side: "left" | "right" | "center" };
2615
+ };
2616
+ ```
2617
+
2618
+ ---
2619
+
2620
+ <a id="wc-layout-mobile"></a>
2621
+
2622
+ # hb-layout-mobile
2623
+
2624
+ ## Description
2625
+
2626
+ Mobile layout with optional offcanvas sidebar navigation, top navbar, main page slot, optional cookie-law banner, and footer. Supports one-screen full-height mode and forwards navbar, footer, and navigation events.
2627
+
2628
+ ## Types
2629
+
2630
+ ```typescript
2631
+ import type {
2632
+ IContacts,
2633
+ ISocials,
2634
+ ICompany,
2635
+ IColumn,
2636
+ IPolicies,
2637
+ } from "../../footer/types/webcomponent.type";
2638
+ import type { IUserMenu } from "../../navbar/types/webcomponent.type";
2639
+ import type { INavLink } from "../../sidenav-link/types/webcomponent.type";
2640
+
2641
+ export type Component = {
2642
+ id?: string;
2643
+ style?: string;
2644
+ socials?: ISocials;
2645
+ contacts?: IContacts;
2646
+ company?: ICompany;
2647
+ navlinks?: INavLink[];
2648
+ pagename?: string;
2649
+ page_title?: string;
2650
+ usermenu?: IUserMenu;
2651
+ cookielaw?: string;
2652
+ columns?: IColumn[];
2653
+ onescreen?: boolean;
2654
+ cookielawuri4more?: string;
2655
+ cookielawallowdecline?: boolean;
2656
+ cookielawlanguage?: string;
2657
+ sidebar?: { title?: string; logo?: string; type?: string };
2658
+ footer?: {
2659
+ type?: "auto" | "small" | "regular" | "large";
2660
+ disable_expanding_small?: boolean;
2661
+ };
2662
+ policies?: IPolicies[];
2663
+ i18nlang?: string;
2664
+ };
2665
+
2666
+ export type Events = {
2667
+ offcanvasswitch: { isOpen: boolean };
2668
+ pageChange: { page: string };
2669
+ navbarDropDownClick: { key: string };
2670
+ footerClick: { elClick: string };
2671
+ layoutStatus: { width: number; size: "large" | "small" };
2672
+ navbarSlotClick: { side: "left" | "right" | "center" };
2673
+ };
2674
+ ```
2675
+
2676
+ ---
2677
+
2678
+ <a id="wc-map"></a>
2679
+
2680
+ # hb-map
2681
+
2682
+ ## Description
2683
+
2684
+ Interactive map: `center`, `zoom`, `source` (OSM or CARTO vector styles), `options` (e.g. `centerFromGeometries`, marker text layout), and `data` with markers (lng/lat, icon, popup HTML, text). Set `screenshot` to capture; emits map clicks, marker clicks, and screenshot payloads.
2685
+
2686
+ ## Types
2687
+
2688
+ ```typescript
2689
+ export type Component = {
2690
+ id?: string;
2691
+ style?: string;
2692
+ zoom: number;
2693
+ center: number[];
2694
+ data: {
2695
+ marker?: {
2696
+ lngLat: number[];
2697
+ icon?: {
2698
+ uri: string;
2699
+ scale?: number;
2700
+ anchor?: number[];
2701
+ opacity?: number;
2702
+ color?: string;
2703
+ };
2704
+ id?: string;
2705
+ popupHtml?: string;
2706
+ text?: string;
2707
+ text_position?: "top" | "right" | "bottom" | "left";
2708
+ text_offset?: number;
2709
+ };
2710
+ point?: {
2711
+ lngLat: number[];
2712
+ icon?: {
2713
+ uri: string;
2714
+ scale?: number;
2715
+ anchor?: number[];
2716
+ opacity?: number;
2717
+ color?: string;
2718
+ };
2719
+ id?: string;
2720
+ popupHtml?: string;
2721
+ };
2722
+ line?: {
2723
+ lngLat: number[];
2724
+ icon?: {
2725
+ uri: string;
2726
+ scale?: number;
2727
+ anchor?: number[];
2728
+ opacity?: number;
2729
+ color?: string;
2730
+ };
2731
+ id?: string;
2732
+ popupHtml?: string;
2733
+ }[];
2734
+ }[];
2735
+ source: { type: string; url?: string; style?: "positron" | "dark_matter" | "voyager" };
2736
+ options: {
2737
+ centerFromGeometries?: boolean;
2738
+ text_position?: "top" | "right" | "bottom" | "left";
2739
+ text_offset?: number;
2740
+ text_scale?: number;
2741
+ };
2742
+ screenshot?: string;
2743
+ };
2744
+
2745
+ export type Events = {
2746
+ pointClickCoordinates: {
2747
+ coordinates: { latitude: number; longitude: number };
2748
+ zoom: number;
2749
+ center: number[];
2750
+ };
2751
+ markerClick: {
2752
+ coordinates: { latitude: number; longitude: number };
2753
+ id: string;
2754
+ };
2755
+ screenshotTaken: {
2756
+ base64: string;
2757
+ };
2758
+ };
2759
+ ```
2760
+
2761
+ ---
2762
+
2763
+ <a id="wc-markdown-viewer"></a>
2764
+
2765
+ # hb-markdown-viewer
2766
+
2767
+ ## Description
2768
+
2769
+ Renders Markdown from a data object (typically with a content string) using marked with GFM and line breaks, and normalizes compact single-line Markdown for clearer lists and headings.
2770
+
2771
+ ## Types
2772
+
2773
+ ```typescript
2774
+ export type Component = {
2775
+ id?: string;
2776
+ style?: string;
2777
+ data: {
2778
+ content: string;
2779
+ };
2780
+ };
2781
+
2782
+ export type Events = {
2783
+ // event: { test: boolean };
2784
+ };
2785
+ ```
2786
+
2787
+ ---
2788
+
2789
+ <a id="wc-matrix-video"></a>
2790
+
2791
+ # hb-matrix-video
2792
+
2793
+ ## Description
2794
+
2795
+ Responsive video wall: lays out `items` in a Bootstrap row/column grid sized from the viewport (16:9-friendly). Each cell can be an iframe, plain MP4 `<video>`, `hb-player-live` (WHEP), or `hb-player-live-camera-ptz`. Tracks hover selection and emits `hoverItem` and `clickItem` with the focused tile id.
2796
+
2797
+ ## Types
2798
+
2799
+ ```typescript
2800
+ export type Component = {
2801
+ id?: string;
2802
+ style?: string;
2803
+ items: { type: "video" | "iframe" | "mediamtx-webrtc" | "mediamtx-webrtc-ptz"; id: string; uri: string; title?: string }[];
2804
+ };
2805
+
2806
+ export type Events = {
2807
+ hoverItem: { id?: string; selected: boolean };
2808
+ clickItem: { id: string };
2809
+ };
2810
+ ```
2811
+
2812
+ ---
2813
+
2814
+ <a id="wc-messages-box"></a>
2815
+
2816
+ # hb-messages-box
2817
+
2818
+ ## Description
2819
+
2820
+ Chat shell combining `hb-messages-list` (thread from `messages`, `authors`, `options`) and `hb-messages-send` (composer). Optional `message` JSON can seed the draft text. Forwards the child `sendMessage` event (text, files, tags) to the host as `sendMessage` for your transport layer.
2821
+
2822
+ ## Types
2823
+
2824
+ ```typescript
2825
+ // type that is used to define a chat message
2826
+ export type TMessage = {
2827
+ id: string;
2828
+ text: string;
2829
+ timestamp: Date;
2830
+ type: "text" | "image" | "video" | "audio" | "file";
2831
+ status?: "pending" | "sent" | "received" | "read";
2832
+ system?: boolean;
2833
+ reply?: boolean;
2834
+ quotedMessageId?: string;
2835
+ authorId?: string;
2836
+ uri?: string;
2837
+ };
2838
+
2839
+ // type that is used to define a chat partecipant
2840
+ export type TAuthor = {
2841
+ id: string;
2842
+ name: string;
2843
+ avatar?: string;
2844
+ status: "online" | "offline" | "away" | "busy";
2845
+ me?: boolean;
2846
+ };
2847
+
2848
+ export type TMessageSend = {
2849
+ text?: string;
2850
+ file?: File;
2851
+ };
2852
+
2853
+ export type Component = {
2854
+ id?: string;
2855
+ style?: string;
2856
+ messages: TMessage[];
2857
+ authors: TAuthor[];
2858
+ options?: {};
2859
+ message?: TMessageSend;
2860
+ };
2861
+
2862
+ export type Events = {
2863
+ sendMessage: { text?: string; id: string; file?: File };
2864
+ };
2865
+ ```
2866
+
2867
+ ---
2868
+
2869
+ <a id="wc-messages-list"></a>
2870
+
2871
+ # hb-messages-list
2872
+
2873
+ ## Description
2874
+
2875
+ Renders a conversation from `messages` joined to `authors`: aligned bubbles for self vs others, optional avatars and names, timestamps, and code blocks with language badges when `type` is `code`. `options` toggle bubbles, avatars, names, and time; `actions` adds per-message icon buttons that dispatch `action` with `messageId` and action name. Consecutive messages from the same author collapse avatar spacing within a short time window.
2876
+
2877
+ ## Types
2878
+
2879
+ ```typescript
2880
+ // type that is used to define a chat message
2881
+ export type TMessage = {
2882
+ id: string;
2883
+ text: string;
2884
+ timestamp: Date;
2885
+ type: "text" | "image" | "video" | "audio" | "file" | "code";
2886
+ status?: "pending" | "sent" | "received" | "read";
2887
+ system?: boolean;
2888
+ reply?: boolean;
2889
+ quotedMessageId?: string;
2890
+ authorId?: string;
2891
+ uri?: string;
2892
+ language?: string; // For code messages
2893
+ };
2894
+
2895
+ // type that is used to define a chat partecipant
2896
+ export type TAuthor = {
2897
+ id: string;
2898
+ name: string;
2899
+ avatar?: string;
2900
+ status: "online" | "offline" | "away" | "busy";
2901
+ me?: boolean;
2902
+ isAI?: boolean; // Special flag for AI author
2903
+ };
2904
+
2905
+ export type Component = {
2906
+ id?: string;
2907
+ style?: string;
2908
+ messages: TMessage[];
2909
+ authors: TAuthor[];
2910
+ options?: {
2911
+ showTimestamp?: boolean;
2912
+ showAvatar?: boolean;
2913
+ showName?: boolean;
2914
+ bubbles?: boolean;
2915
+ };
2916
+ actions?: {
2917
+ icon: string;
2918
+ name: string;
2919
+ }[]
2920
+ };
2921
+
2922
+ export type Events = {
2923
+ action: { messageId: string; action: string };
2924
+ };
2925
+ ```
2926
+
2927
+ ---
2928
+
2929
+ <a id="wc-messages-send"></a>
2930
+
2931
+ # hb-messages-send
2932
+
2933
+ ## Description
2934
+
2935
+ Message composer with auto-growing textarea (optional `expandable` and maximize control), Enter-to-send, file attachments with previews (`files.mode` single or multiple), and optional `tags` as toggleable chips. Dispatches `sendMessage` with `text`, selected `tags`, and staged `files` when the user sends.
2936
+
2937
+ ## Types
2938
+
2939
+ ```typescript
2940
+ export type Component = {
2941
+ id?: string;
2942
+ style?: string;
2943
+ text?: string;
2944
+ expandable?: boolean;
2945
+ tags?: {
2946
+ label?: string;
2947
+ icon?: string;
2948
+ id: string
2949
+ color?: string;
2950
+ }[]
2951
+ files?: {
2952
+ mode: "single" | "multiple";
2953
+ }
2954
+ };
2955
+
2956
+ export type Events = {
2957
+ sendMessage: { text?: string; id: string; tags: string[]; files: File[] };
2958
+ };
2959
+ ```
2960
+
2961
+ ---
2962
+
2963
+ <a id="wc-messages-topics-card"></a>
2964
+
2965
+ # hb-messages-topics-card
2966
+
2967
+ ## Description
2968
+
2969
+ Lists chat or channel previews from `chats`: avatar, title, last message snippet, derived time label, and unread `counter` badge. Clicking a row marks it selected (`_selected`) and dispatches `select` with that chat payload for opening a thread or switching context.
2970
+
2971
+ ## Types
2972
+
2973
+ ```typescript
2974
+ export type IChat = {
2975
+ time: Date;
2976
+ title: string;
2977
+ text: string;
2978
+ img_uri: string;
2979
+ is_group?: boolean;
2980
+ chat_name?: string;
2981
+ chat_img?: string;
2982
+ chat_id: string;
2983
+ last_message_author?: string;
2984
+ last_message_author_img?: string;
2985
+ last_message_time?: Date;
2986
+ last_message_text?: string;
2987
+ counter?: number;
2988
+ localeTimeString?: string;
2989
+ _selected?: boolean;
2990
+ };
2991
+
2992
+ export type Component = {
2993
+ id?: string;
2994
+ style?: string;
2995
+
2996
+ chats: IChat[];
2997
+ };
2998
+
2999
+ export type Events = {
3000
+ select: IChat;
3001
+ };
3002
+ ```
3003
+
3004
+ ---
3005
+
3006
+ <a id="wc-modal-video"></a>
3007
+
3008
+ # hb-modal-video
3009
+
3010
+ ## Description
3011
+
3012
+ Video modal built on hb-dialog: when uri is set the dialog opens with either a YouTube iframe (provider youtube) or an HTML5 video element, optional title slot, and videoModalEvent when visibility changes.
3013
+
3014
+ ## Types
3015
+
3016
+ ```typescript
3017
+ export type Component = {
3018
+ id?: string;
3019
+ style?: string;
3020
+ item?: string;
3021
+ uri: string;
3022
+ title?: string;
3023
+ provider?: string;
3024
+ };
3025
+
3026
+ export type Events = {
3027
+ videoModalEvent: { id: string; show: boolean };
3028
+ };
3029
+ ```
3030
+
3031
+ ---
3032
+
3033
+ <a id="wc-navbar"></a>
3034
+
3035
+ # hb-navbar
3036
+
3037
+ ## Description
3038
+
3039
+ Top navigation bar with optional hamburger to toggle an offcanvas menu, brand name and logo, slottable left, center, and right areas, and an optional user avatar dropdown (hb-dropdown-simple) with item click events.
3040
+
3041
+ ## Types
3042
+
3043
+ ```typescript
3044
+ interface IUserMenuListItem {
3045
+ key: string;
3046
+ label: string;
3047
+ badge?: number;
3048
+ group?: string;
3049
+ }
3050
+ export interface IUserMenu {
3051
+ imgUri: string;
3052
+ list?: IUserMenuListItem[];
3053
+ }
3054
+ export type Component = {
3055
+ id?: string;
3056
+ style?: string;
3057
+ companybrandname: string;
3058
+ companylogouri: string;
3059
+ // pagetitle: string;
3060
+ switchopen?: "yes" | "no";
3061
+ usermenu?: IUserMenu;
3062
+ noburger?: string;
3063
+ };
3064
+
3065
+ export type Events = {
3066
+ navbarDropDownClick: { key: string };
3067
+ navmenuswitch: { isOpen: boolean };
3068
+ navbarSlotClick: { side: "left" | "right" | "center" };
3069
+ };
3070
+ ```
3071
+
3072
+ ---
3073
+
3074
+ <a id="wc-offcanvas"></a>
3075
+
3076
+ ## `hb-offcanvas` — offcanvas
3077
+
3078
+ **Category:** layout
3079
+ **Tags:** layout, navigation
3080
+
3081
+ ### What it does
3082
+
3083
+ Bootstrap-style offcanvas panel that hosts sidebar-desktop navigation. Can start open or closed, optionally shows a backdrop (autohide) for dismissal, and dispatches page changes and open/close state.
3084
+
3085
+ ### Custom element
3086
+
3087
+ `hb-offcanvas`
3088
+
3089
+ ### Attributes (snake_case; use string values in HTML)
3090
+
3091
+ - `id`, `style` (optional): strings.
3092
+ - `opened` (optional): boolean string — panel starts open.
3093
+ - `companylogouri`, `companytitle` (optional): strings.
3094
+ - `groups` (optional): JSON string — `{ key; label }[]` for nav grouping.
3095
+ - `enablefooter` (optional): boolean string.
3096
+ - `type` (optional): `"open"` | `"autohide"` | `"small"` — backdrop and sizing.
3097
+ - `navpage` (optional): string — active page key.
3098
+ - `navlinks` (optional): JSON string — `INavLink[]` (label, key, icon, badge, subLinks, etc.).
3099
+
3100
+ ### Events
3101
+
3102
+ - `offcanvasswitch`: `{ isOpen: boolean }`.
3103
+ - `pageChange`: `{ page: string }`.
3104
+
3105
+ ### Usage notes
3106
+
3107
+ - **Slots:** `test`, `header`, `footer`.
3108
+ - **CSS parts:** `header`.
3109
+ - **CSS variables:** `--bs-primary` (Bootstrap theme).
3110
+ - Pair with `hb-sidebar-desktop` / `hb-sidenav-link` patterns; see Storybook examples in `extra/docs.ts`.
3111
+
3112
+ ### Minimal HTML example
3113
+
3114
+ ```html
3115
+ <hb-offcanvas
3116
+ opened="true"
3117
+ type="autohide"
3118
+ companytitle="Acme"
3119
+ navpage="home"
3120
+ navlinks='[{"label":"Home","key":"home","icon":"house-door"}]'
3121
+ ></hb-offcanvas>
3122
+ ```
3123
+
3124
+ ---
3125
+
3126
+ <a id="wc-order-list"></a>
3127
+
3128
+ ## `hb-order-list` — order list
3129
+
3130
+ **Category:** commerce
3131
+ **Tags:** commerce, order
3132
+
3133
+ ### What it does
3134
+
3135
+ Order summary view driven by a payment JSON object: order number header, optional tracking area, list of line items with image and name, and a footer showing the order total including tax and optional shipment fee. Exposes the item image via the `item_image` CSS part.
3136
+
3137
+ ### Custom element
3138
+
3139
+ `hb-order-list`
3140
+
3141
+ ### Attributes (snake_case; use string values in HTML)
3142
+
3143
+ - `id`, `style` (optional): strings.
3144
+ - `payment` (required): JSON string — `OrderPayment` with `orderNumber`, `countryCode`, `items` (shop line items plus `image` per row), plus cart/tax fields from shared checkout types.
3145
+
3146
+ ### Events
3147
+
3148
+ None declared.
3149
+
3150
+ ### Usage notes
3151
+
3152
+ - **CSS parts:** `item_image`.
3153
+ - Serialize `payment` as a single JSON attribute; see `builder/src/wc/order-list/types/webcomponent.type.d.ts` and examples in `extra/docs.ts`.
3154
+
3155
+ ### Minimal HTML example
3156
+
3157
+ ```html
3158
+ <hb-order-list
3159
+ payment='{"orderNumber":"1001","countryCode":"EU","items":[{"id":"1","name":"Item","unitaryPrice":10,"taxPercentage":22,"image":"https://example.com/a.jpg"}]}'
3160
+ ></hb-order-list>
3161
+ ```
3162
+
3163
+ ---
3164
+
3165
+ <a id="wc-pad-joystick"></a>
3166
+
3167
+ ## `hb-pad-joystick` — pad joystick
3168
+
3169
+ **Category:** utilities
3170
+ **Tags:** utilities, controls
3171
+
3172
+ ### What it does
3173
+
3174
+ Touch-friendly directional control: either a four-way D-pad that emits cardinal directions or an analog joystick that streams position and cardinal direction with customizable colors.
3175
+
3176
+ ### Custom element
3177
+
3178
+ `hb-pad-joystick`
3179
+
3180
+ ### Attributes (snake_case; use string values in HTML)
3181
+
3182
+ - `id`, `style` (optional): strings.
3183
+ - `pad_or_joystick` (optional): `"dpad"` | `"joystick"` (default pad-style behavior when omitted per examples).
3184
+ - `joystick_parameters` (optional): JSON string — `internalFillColor`, `internalLineWidth`, `internalStrokeColor`, `externalLineWidth`, `externalStrokeColor`.
3185
+
3186
+ ### Events
3187
+
3188
+ - `sendDirection`: `{ direction: "up" | "right" | "down" | "left"; id: string }`.
3189
+ - `sendJoystickPosition`: `{ x; y; cardinalDirection; id: string }` (cardinal set per `CardinalDirection` in types).
3190
+
3191
+ ### Usage notes
3192
+
3193
+ - **CSS variables:** `--hb-pad-joystick-size` (default `200px`).
3194
+ - Use `pad_or_joystick="joystick"` for analog mode; see `extra/docs.ts`.
3195
+
3196
+ ### Minimal HTML example
3197
+
3198
+ ```html
3199
+ <hb-pad-joystick pad_or_joystick="dpad"></hb-pad-joystick>
3200
+ ```
3201
+
3202
+ ---
3203
+
3204
+ <a id="wc-page-checkout"></a>
3205
+
3206
+ ## `hb-page-checkout` — page checkout
3207
+
3208
+ **Category:** commerce
3209
+ **Tags:** commerce, checkout, page
3210
+
3211
+ ### What it does
3212
+
3213
+ Checkout page layout that embeds the payment flow and shopping cart: left column uses `hb-checkout` (user, shipments, gateways, payment) and right column uses `hb-checkout-shopping-cart`. Recomputes line totals, tax, shipment fee, and payment total from JSON props; updates shipment selection internally and forwards `paymentCompleted` and `saveUser` to the host.
3214
+
3215
+ ### Custom element
3216
+
3217
+ `hb-page-checkout`
3218
+
3219
+ ### Attributes (snake_case; use string values in HTML)
3220
+
3221
+ - `id`, `style` (optional): strings.
3222
+ - `shipments` (required): JSON string — `IShipment[]` (see `hb-checkout` types).
3223
+ - `user` (required): JSON string — `IUser` (address, nationality, zip, `fixed`, etc.).
3224
+ - `payment` (required): JSON string — shopping payment + `IPayment` fields (currency, items, totals, merchant, country).
3225
+ - `gateways` (required): JSON string — `IGateway[]` (e.g. PayPal id, Google Pay ids).
3226
+ - `completed` (optional): `"yes"` | `"no"` — completion state for UI.
3227
+
3228
+ ### Events
3229
+
3230
+ - `saveUser`: detail is `IUser` (updated user payload).
3231
+ - `paymentCompleted`: `{ total: number; method: string; completed: true }`.
3232
+
3233
+ ### Usage notes
3234
+
3235
+ - **CSS variables:** `--hb-checkout-border`, Bootstrap `--bs-primary`, `--bs-secondary`, `--bs-success`, `--bs-info`, `--bs-warning`, `--bs-danger`.
3236
+ - Compose gateways and payment objects like Storybook `extra/docs.ts`; shared types live under `hb-checkout` / `hb-checkout-shopping-cart`.
3237
+
3238
+ ### Minimal HTML example
3239
+
3240
+ ```html
3241
+ <hb-page-checkout
3242
+ shipments="[]"
3243
+ user='{"fullName":"Jane Doe","addressWithNumber":"Main 1","city":"Rome","nationality":"IT","zip":"00100","fixed":true}'
3244
+ payment='{"countryCode":"IT","merchantName":"Shop","currencyCode":"EUR","total":100,"items":[{"id":"a","name":"A","unitaryPrice":10,"taxPercentage":22}]}'
3245
+ gateways='[{"id":"paypal","label":"PayPal","paypalid":"YOUR_CLIENT_ID"}]'
3246
+ ></hb-page-checkout>
3247
+ ```
3248
+
3249
+ ---
3250
+
3251
+ <a id="wc-page-invoice"></a>
3252
+
3253
+ ## `hb-page-invoice` — page invoice
3254
+
3255
+ **Category:** commerce
3256
+ **Tags:** commerce, invoice, page
3257
+
3258
+ ### What it does
3259
+
3260
+ Printable invoice page: shows seller and buyer from headers, invoice date and serial, line items in `hb-table` with price, quantity, VAT and row totals, plus subtotal, tax and grand total in the invoice currency. When `printer` is not `yes`, offers print and open-in-window actions.
3261
+
3262
+ ### Custom element
3263
+
3264
+ `hb-page-invoice`
3265
+
3266
+ ### Attributes (snake_case; use string values in HTML)
3267
+
3268
+ - `id`, `style` (optional): strings.
3269
+ - `printer` (optional): `"yes"` | `"no"` — print-only / interactive mode.
3270
+ - `headers` (required): JSON string — `IHeaders` (`serial`, `from` with `logo` and `shortName`, `to`, optional `country`, `date`, `category`, etc.).
3271
+ - `items` (required): JSON string — `IItem[]` (`desc`, `unitaryPrice`, `taxPercentage`, optional `quantity`, `unit`, `discount`).
3272
+
3273
+ ### Events
3274
+
3275
+ None declared.
3276
+
3277
+ ### Usage notes
3278
+
3279
+ - **CSS variables:** Bootstrap `--bs-primary` through `--bs-danger`.
3280
+ - Align `headers` / `items` with `builder/src/wc/page-invoice/types/webcomponent.type.d.ts`.
3281
+
3282
+ ### Minimal HTML example
3283
+
3284
+ ```html
3285
+ <hb-page-invoice
3286
+ printer="no"
3287
+ headers='{"serial":"INV-1","from":{"piva":"IT1","name":"Seller","address":"Via 1","email":"a@b.co","phone":"0","logo":"https://example.com/logo.svg","shortName":"Seller"},"to":{"piva":"IT2","name":"Buyer","address":"Via 2","email":"b@b.co","phone":"1"}}'
3288
+ items='[{"desc":"Service","unitaryPrice":100,"taxPercentage":22,"quantity":1}]'
3289
+ ></hb-page-invoice>
3290
+ ```
3291
+
3292
+ ---
3293
+
3294
+ <a id="wc-paginate"></a>
3295
+
3296
+ ## `hb-paginate` — paginate
3297
+
3298
+ **Category:** utilities
3299
+ **Tags:** utilities, navigation
3300
+
3301
+ ### What it does
3302
+
3303
+ Pagination bar with first/prev/next/last and nearby page buttons, optional “showing X–Y of total” text, configurable page-size input or select, and optional sort field and direction controls with i18n labels.
3304
+
3305
+ ### Custom element
3306
+
3307
+ `hb-paginate`
3308
+
3309
+ ### Attributes (snake_case; use string values in HTML)
3310
+
3311
+ - `id`, `style` (optional): strings.
3312
+ - `page` (required), `pages` (required): numbers as strings.
3313
+ - `info` (optional): JSON string — `total`, `size`, `page_size_type` (`number` | `select`), `page_size_options`, `sort_fields`, `sort_by`, `sort_direction`, `sort_disabled`, `sort_direction_disabled`, `sort_strict_direction`, `sort_default_value`, `sort_default_label`.
3314
+ - `i18nlang` (optional): string — e.g. `en`, `it`.
3315
+
3316
+ ### Events
3317
+
3318
+ - `pageChange`: `{ page: number; pages: number }`.
3319
+ - `changePageSize`: `{ page_size: number }`.
3320
+ - `changeSort`: `{ sort_by: string; sort_direction: string }`.
3321
+
3322
+ ### Usage notes
3323
+
3324
+ - **CSS variables:** `--bs-primary`.
3325
+ - **i18n:** Italian and English in metadata; set `i18nlang` accordingly.
3326
+ - See `extra/docs.ts` for combined sort + page-size examples.
3327
+
3328
+ ### Minimal HTML example
3329
+
3330
+ ```html
3331
+ <hb-paginate page="0" pages="5" i18nlang="en"></hb-paginate>
3332
+ ```
3333
+
3334
+ ---
3335
+
3336
+ <a id="wc-paragraps-around-image"></a>
3337
+
3338
+ ## `hb-paragraps-around-image` — paragraphs around image
3339
+
3340
+ **Category:** content
3341
+ **Tags:** content
3342
+
3343
+ ### What it does
3344
+
3345
+ Editorial block with a central image and up to six text blocks in two side columns using `hb-paragraps-around-image-cell` (indices 0, 2, 4 left; 1, 3, 5 right). Parses `paragraphs` from JSON and bubbles `paragraphPressed` when a cell fires it.
3346
+
3347
+ ### Custom element
3348
+
3349
+ `hb-paragraps-around-image`
3350
+
3351
+ ### Attributes (snake_case; use string values in HTML)
3352
+
3353
+ - `id`, `style` (optional): strings.
3354
+ - `img` (required): string — image URL.
3355
+ - `paragraphs` (required): JSON string — array of `{ text; title?; icon?; link?; key? }`.
3356
+
3357
+ ### Events
3358
+
3359
+ - `paragraphPressed`: `{ key: string }`.
3360
+
3361
+ ### Usage notes
3362
+
3363
+ - **Slots:** `skelcontent`.
3364
+ - **CSS parts:** `testpart`.
3365
+ - Up to six paragraph objects; layout alternates columns per index.
3366
+
3367
+ ### Minimal HTML example
3368
+
3369
+ ```html
3370
+ <hb-paragraps-around-image
3371
+ img="https://placehold.co/300x200"
3372
+ paragraphs='[{"text":"Hello body","title":"Title","icon":"globe","link":"https://example.com"}]'
3373
+ ></hb-paragraps-around-image>
3374
+ ```
3375
+
3376
+ ---
3377
+
3378
+ <a id="wc-paragraps-around-image-cell"></a>
3379
+
3380
+ ## `hb-paragraps-around-image-cell` — paragraph cell around image
3381
+
3382
+ **Category:** content
3383
+ **Tags:** content
3384
+
3385
+ ### What it does
3386
+
3387
+ One paragraph tile with Bootstrap icon, optional title as external link or key-triggered control (dispatches `paragraphPressed` with `key`), and body text clamped to `max_lines` for consistent height inside `hb-paragraps-around-image` layouts.
3388
+
3389
+ ### Custom element
3390
+
3391
+ `hb-paragraps-around-image-cell`
3392
+
3393
+ ### Attributes (snake_case; use string values in HTML)
3394
+
3395
+ - `id`, `style` (optional): strings.
3396
+ - `paragraph` (required): JSON string — `{ text; title?; icon?; link?; key? }`.
3397
+ - `max_lines` (optional): number as string — line clamp for body text.
3398
+
3399
+ ### Events
3400
+
3401
+ - `paragraphPressed`: `{ key: string }`.
3402
+
3403
+ ### Usage notes
3404
+
3405
+ - **Slots:** `skelcontent`.
3406
+ - **CSS parts:** `testpart`.
3407
+ - Typically embedded by `hb-paragraps-around-image`; usable alone for Storybook-style tiles (no separate image prop on this cell).
3408
+
3409
+ ### Minimal HTML example
3410
+
3411
+ ```html
3412
+ <hb-paragraps-around-image-cell
3413
+ paragraph='{"text":"Body copy","title":"Read more","icon":"globe","key":"section-1"}'
3414
+ max_lines="4"
3415
+ ></hb-paragraps-around-image-cell>
3416
+ ```
3417
+
3418
+ ---
3419
+
3420
+ <a id="wc-payment-paypal"></a>
3421
+
3422
+ ## `hb-payment-paypal` — payment PayPal
3423
+
3424
+ **Category:** commerce
3425
+ **Tags:** commerce, payment
3426
+
3427
+ ### What it does
3428
+
3429
+ Loads the PayPal JS SDK with your client id and currency, renders PayPal Buttons for a fixed order total, captures payment on approval, and dispatches `paymentCompleted` when the order is captured successfully.
3430
+
3431
+ ### Custom element
3432
+
3433
+ `hb-payment-paypal`
3434
+
3435
+ ### Attributes (snake_case; use string values in HTML)
3436
+
3437
+ - `id`, `style` (optional): strings.
3438
+ - `paypalid` (required): string — PayPal client / app id.
3439
+ - `currency` (required): `"EUR"` | `"USD"` (string).
3440
+ - `total` (required): number as string — order amount.
3441
+
3442
+ ### Events
3443
+
3444
+ - `paymentCompleted`: `{ method: "paypal"; total: number }`.
3445
+
3446
+ ### Usage notes
3447
+
3448
+ - **CSS variables:** `--hb-checkout-border`.
3449
+ - **CSS parts:** `btn` (PayPal button surface).
3450
+ - Ensure CSP and PayPal script loading match your host app; totals are fixed for the rendered session.
3451
+
3452
+ ### Minimal HTML example
3453
+
3454
+ ```html
3455
+ <hb-payment-paypal paypalid="YOUR_CLIENT_ID" currency="EUR" total="40"></hb-payment-paypal>
3456
+ ```
3457
+
3458
+ ---
3459
+
3460
+ <a id="wc-player-input-streaming"></a>
3461
+
3462
+ ## `hb-player-input-streaming` — player input streaming
3463
+
3464
+ **Category:** media
3465
+ **Tags:** media, video, camera
3466
+
3467
+ ### What it does
3468
+
3469
+ Requests camera and microphone with `getUserMedia`, binds the stream to a `<video>` element, and exposes basic controls (play/pause, fullscreen, enable/disable video and audio tracks). Emits `AudioVideoAccess` with grant result and `VideoInitialized` with the video element reference once the stream is attached.
3470
+
3471
+ ### Custom element
3472
+
3473
+ `hb-player-input-streaming`
3474
+
3475
+ ### Attributes (snake_case; use string values in HTML)
3476
+
3477
+ - `id` (optional): string — echoed on dispatched events.
3478
+
3479
+ ### Events
3480
+
3481
+ - `AudioVideoAccess`: `{ granted: boolean; id: string }`.
3482
+ - `VideoInitialized`: `{ videoElement; id: string }`.
3483
+ - `event`: `{ test: boolean }` (test hook in source).
3484
+
3485
+ ### Usage notes
3486
+
3487
+ - Requires secure context and user permission for camera/microphone.
3488
+ - Types in `webcomponent.type.d.ts` only list `event`; runtime also dispatches `AudioVideoAccess` and `VideoInitialized` (see `component.wc.svelte`).
3489
+
3490
+ ### Minimal HTML example
3491
+
3492
+ ```html
3493
+ <hb-player-input-streaming id="cam1"></hb-player-input-streaming>
3494
+ ```
3495
+
3496
+ ---
3497
+
3498
+ <a id="wc-player-live"></a>
3499
+
3500
+ ## `hb-player-live` — player live
3501
+
3502
+ **Category:** media
3503
+ **Tags:** media, video, streaming
3504
+
3505
+ ### What it does
3506
+
3507
+ Live streaming `<video>` player for HLS (hls.js or native), WebSocket WebRTC (`simple-webrtc-element`), or WHEP (MediaMTX). Polls the manifest for HLS liveness, exposes the element via `getVideoElement`, and emits `liveStatus` and `htmlVideoInit`. When the stream is offline or missing, shows optional title/subtitle/text from `replacewithtext`, `forcecover`, or fallback labels.
3508
+
3509
+ ### Custom element
3510
+
3511
+ `hb-player-live`
3512
+
3513
+ ### Attributes (snake_case; use string values in HTML)
3514
+
3515
+ - `id`, `style` (optional): strings.
3516
+ - `mediauri` (required): string — stream URL (HLS, WebRTC, WHEP as configured).
3517
+ - `media_type` (optional): `"hls"` | `"webrtc"` | `"auto"` | `"whep"` (empty string allowed in examples).
3518
+ - `forcecover` (optional): string — e.g. `"yes"` to force cover layout with placeholder text.
3519
+ - `replacewithtext` (optional): JSON string — `{ title; subtitle?; text? }` when offline.
3520
+ - `no_controls` (optional): boolean string — hide native/custom controls.
3521
+
3522
+ ### Events
3523
+
3524
+ - `liveStatus`: `{ live: boolean; id: string }`.
3525
+ - `htmlVideoInit`: `{ video; id: string }`.
3526
+
3527
+ ### Usage notes
3528
+
3529
+ - **CSS parts:** `container`, `replacewithtext`, `video`.
3530
+ - Pick `media_type` to match your pipeline (`whep` for WHEP examples in docs).
3531
+
3532
+ ### Minimal HTML example
3533
+
3534
+ ```html
3535
+ <hb-player-live
3536
+ mediauri="https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8"
3537
+ media_type="hls"
3538
+ ></hb-player-live>
3539
+ ```
3540
+
3541
+ ---
3542
+
3543
+ <a id="wc-player-live-camera-ptz"></a>
3544
+
3545
+ ## `hb-player-live-camera-ptz` — player live camera PTZ
3546
+
3547
+ **Category:** media
3548
+ **Tags:** media, video, streaming, camera
3549
+
3550
+ ### What it does
3551
+
3552
+ Live camera view built on `hb-player-live` with a configurable PTZ panel: D-pad or analog joystick, zoom in/out, go home, click-to-center region on the video, optional grid overlay, fullscreen, mute, and play/pause. Manages camera presets in dialogs with `hb-table` (add, go to, delete). Feature flags live in `configuration`; PTZ and UI state are driven by `is_ptz_connected`, `is_ptz_panel_opened`, and `is_home`. Dispatches movement, preset, and video-init events for the host app to wire to your backend.
3553
+
3554
+ ### Custom element
3555
+
3556
+ `hb-player-live-camera-ptz`
3557
+
3558
+ ### Attributes (snake_case; use string values in HTML)
3559
+
3560
+ - `id`, `style` (optional): strings.
3561
+ - `live_uri` (required): string — stream URI for the embedded player.
3562
+ - `media_type` (optional): `"hls"` | `"webrtc"` | `"auto"` | `"whep"` | `""`.
3563
+ - `is_ptz_connected`, `is_ptz_panel_opened`, `is_home` (optional): boolean strings.
3564
+ - `presets` (optional): JSON string — `TPreset[]` (`token`, `name`, `x`, `y`, `z`).
3565
+ - `current_preset` (optional): string — active preset token.
3566
+ - `position` (optional): `"top"` | `"right-bottom"` | `"left-bottom"` | `"bottom"` | `"right-top"` | `"left-top"`.
3567
+ - `configuration` (optional): JSON string — toggles for joystick, presets, zoom, pan, tilt, click-to-center, settings, etc.
3568
+
3569
+ ### Events
3570
+
3571
+ - `initVideo`: `{ id; time; htmlVideoElement }`.
3572
+ - `panelMove`: `{ id; opened: boolean }`.
3573
+ - `goToHome`, `goToSelectedArea`, `setPreset`, `goToPreset`, `deletePreset`, `zoomAction`, `sendJoystickPosition`, `sendDirection` — see `builder/src/wc/player-live-camera-ptz/types/webcomponent.type.d.ts` for full payloads (`movementSettings`, geometry, presets, etc.).
3574
+
3575
+ ### Usage notes
3576
+
3577
+ - **CSS variables:** Bootstrap `--bs-primary` through `--bs-danger`.
3578
+ - Host must implement PTZ API calls in response to movement and preset events.
3579
+
3580
+ ### Minimal HTML example
3581
+
3582
+ ```html
3583
+ <hb-player-live-camera-ptz
3584
+ live_uri="https://example.com/stream.m3u8"
3585
+ media_type="auto"
3586
+ is_ptz_connected="true"
3587
+ is_ptz_panel_opened="true"
3588
+ ></hb-player-live-camera-ptz>
3589
+ ```
3590
+
3591
+ ---
3592
+
3593
+ <a id="wc-product-comparison"></a>
3594
+
3595
+ ## `hb-product-comparison` — product comparison
3596
+
3597
+ **Category:** commerce
3598
+ **Tags:** commerce, product
3599
+
3600
+ ### What it does
3601
+
3602
+ Product comparison matrix: columns per product (model, description, promotion, price, purchase button) and rows per feature header with icons or text from each product’s characteristics. Supports preferred product and sale styling; dispatches `purchaseClick` with product id. Desktop table vs stacked mobile layout.
3603
+
3604
+ ### Custom element
3605
+
3606
+ `hb-product-comparison`
3607
+
3608
+ ### Attributes (snake_case; use string values in HTML)
3609
+
3610
+ - `id`, `style` (optional): strings.
3611
+ - `headers` (required): JSON string — `{ id; label }[]` feature rows.
3612
+ - `products` (required): JSON string — `Product[]` (`id`, `model`, `price`, `characteristics` map, optional `description`, `note`, `promotion`, `columnColor`).
3613
+ - `options` (required): JSON string — `Options` (`currency`, optional `preferredProductId`).
3614
+
3615
+ ### Events
3616
+
3617
+ - `purchaseClick`: `{ id: string }` — product id for checkout handoff.
3618
+
3619
+ ### Usage notes
3620
+
3621
+ - **CSS parts:** `container`, `col`, `row`.
3622
+ - Characteristic values drive per-cell visuals (`valid`, `disabled`, `blocked`, etc. per examples in `extra/docs.ts`).
3623
+
3624
+ ### Minimal HTML example
3625
+
3626
+ ```html
3627
+ <hb-product-comparison
3628
+ headers='[{"id":"f1","label":"Feature 1"}]'
3629
+ products='[{"id":"p1","model":"Basic","price":10,"characteristics":{"f1":"valid"}}]'
3630
+ options='{"currency":"€"}'
3631
+ ></hb-product-comparison>
3632
+ ```
3633
+
3634
+ ---
3635
+
3636
+ <a id="wc-range-slider"></a>
3637
+
3638
+ ## `hb-range-slider` — range slider
3639
+
3640
+ **Category:** inputs
3641
+ **Tags:** inputs, slider
3642
+
3643
+ ### What it does
3644
+
3645
+ Dual-handle range slider mapping a min–max domain to thumb positions, with optional value bubbles and a third handle for a single marker position; emits `changeRangeValues` with real and percentage values on change.
3646
+
3647
+ ### Custom element
3648
+
3649
+ `hb-range-slider`
3650
+
3651
+ ### Attributes (snake_case; use string values in HTML)
3652
+
3653
+ - `id`, `style` (optional): strings.
3654
+ - `min`, `max` (optional): numbers as strings — domain bounds.
3655
+ - `minval`, `maxval` (optional): numbers as strings — selected range endpoints.
3656
+ - `position_value` (optional): number as string — marker handle value.
3657
+ - `withbubbles` (optional): boolean string — show value bubbles.
3658
+
3659
+ ### Events
3660
+
3661
+ - `changeRangeValues`: `{ minValue; maxValue; minPercent; maxPercent; positionPercent; positionValReal }`.
3662
+
3663
+ ### Usage notes
3664
+
3665
+ - **CSS variables:** `--hb-slider-background-color`.
3666
+ - **CSS parts:** `inverse`, `the-range`, `the-thumb`, `sign`.
3667
+
3668
+ ### Minimal HTML example
3669
+
3670
+ ```html
3671
+ <hb-range-slider min="0" max="100" minval="20" maxval="80" withbubbles="true"></hb-range-slider>
3672
+ ```
3673
+
3674
+ ---
3675
+
3676
+ <a id="wc-searchbar"></a>
3677
+
3678
+ ## `hb-searchbar` — searchbar
3679
+
3680
+ **Category:** utilities
3681
+ **Tags:** utilities, search
3682
+
3683
+ ### What it does
3684
+
3685
+ Search field with optional dropdown `searchlist` (id, text, icons, badges, tags, URLs). Configure `value`, `searchlabel`, `textarea`, `minlength`, `disable_preview`, and CSS parts for the input and menu. Dispatches `search` and `clear`.
3686
+
3687
+ ### Custom element
3688
+
3689
+ `hb-searchbar`
3690
+
3691
+ ### Attributes (snake_case; use string values in HTML)
3692
+
3693
+ - `id`, `style` (optional): strings.
3694
+ - `value` (required): string — current query text.
3695
+ - `searchlabel` (optional): string — button / field label.
3696
+ - `minlength` (optional): number as string.
3697
+ - `searchlist` (optional): JSON string — `TSearchListItem[]` (`id`, `text`, optional `url`, `icon`, `tags`, `badge`, `number_of_results`, `fixed`).
3698
+ - `input_info` (optional): JSON string — single `TSearchListItem` for input adornment.
3699
+ - `textarea` (optional): `"yes"` | `"true"` | `""` — multiline input mode.
3700
+ - `disable_preview` (optional): `"yes"` | `"no"` | `"true"` | `"false"` | `"on"` | `"off"`.
3701
+
3702
+ ### Events
3703
+
3704
+ - `search`: `{ input: string; by: "button" | "input" | "searchlist" }`.
3705
+ - `clear`: `{ id: string }`.
3706
+
3707
+ ### Usage notes
3708
+
3709
+ - **CSS parts:** `dropdown-menu`, `search-input`.
3710
+ - Storybook may list `initial_value`; runtime props follow `webcomponent.type.d.ts` (`value` is required).
3711
+
3712
+ ### Minimal HTML example
3713
+
3714
+ ```html
3715
+ <hb-searchbar
3716
+ value=""
3717
+ searchlabel="Search"
3718
+ searchlist='[{"id":"1","text":"Suggestion"}]'
3719
+ ></hb-searchbar>
3720
+ ```
3721
+
3722
+ ---
3723
+
3724
+ <a id="wc-shop-item-cell"></a>
3725
+
3726
+ ## `hb-shop-item-cell` — shop item cell
3727
+
3728
+ **Category:** commerce
3729
+ **Tags:** commerce, product
3730
+
3731
+ ### What it does
3732
+
3733
+ Vertical shop product card: top image with optional badge, then the same body as `hb-shop-item-row` (title, subtitle, text, stars, reviews, prices, footer) with Bootstrap card styling and matching slots.
3734
+
3735
+ ### Custom element
3736
+
3737
+ `hb-shop-item-cell`
3738
+
3739
+ ### Attributes (snake_case; use string values in HTML)
3740
+
3741
+ - `id`, `style` (optional): strings.
3742
+ - `img`, `url`, `badge`, `title`, `subtitle`, `text`, `reviews`, `reviewsurl`, `price`, `regularprice`, `footer` (required in types): strings (use `""` when empty).
3743
+ - `rating`, `ratingscale` (required): numbers as strings.
3744
+
3745
+ ### Events
3746
+
3747
+ None declared.
3748
+
3749
+ ### Usage notes
3750
+
3751
+ - **Slots:** `badge`, `title`, `subtitle`, `text`, `reviews`, `price`, `footer`, `regularprice`.
3752
+ - Mirror `hb-shop-item-row` content model for consistent catalog UI.
3753
+
3754
+ ### Minimal HTML example
3755
+
3756
+ ```html
3757
+ <hb-shop-item-cell
3758
+ img="https://placehold.co/120"
3759
+ url="/p/1"
3760
+ badge=""
3761
+ title="Product"
3762
+ subtitle="Short line"
3763
+ text="Description"
3764
+ rating="4"
3765
+ ratingscale="5"
3766
+ reviews="12 reviews"
3767
+ reviewsurl="/p/1#reviews"
3768
+ price="€19"
3769
+ regularprice=""
3770
+ footer=""
3771
+ ></hb-shop-item-cell>
3772
+ ```
3773
+
3774
+ ---
3775
+
3776
+ <a id="wc-shop-item-row"></a>
3777
+
3778
+ ## `hb-shop-item-row` — shop item row
3779
+
3780
+ **Category:** commerce
3781
+ **Tags:** commerce, product
3782
+
3783
+ ### What it does
3784
+
3785
+ Horizontal shop product card: image with optional badge, linked title and metadata, description, star rating scale with numeric rating and reviews link, current and strikethrough prices, and optional footer—all overridable via named slots.
3786
+
3787
+ ### Custom element
3788
+
3789
+ `hb-shop-item-row`
3790
+
3791
+ ### Attributes (snake_case; use string values in HTML)
3792
+
3793
+ - `id`, `style` (optional): strings.
3794
+ - `img`, `url`, `badge`, `title`, `subtitle`, `text`, `reviews`, `reviewsurl`, `price`, `regularprice`, `footer` (required in types): strings.
3795
+ - `rating`, `ratingscale` (required): numbers as strings.
3796
+
3797
+ ### Events
3798
+
3799
+ None declared.
3800
+
3801
+ ### Usage notes
3802
+
3803
+ - **Slots:** `badge`, `title`, `subtitle`, `text`, `reviews`, `price`, `footer`, `regularprice`.
3804
+ - Storybook exposes `action` for demos only; it is not on the `Component` type.
3805
+
3806
+ ### Minimal HTML example
3807
+
3808
+ ```html
3809
+ <hb-shop-item-row
3810
+ img="https://placehold.co/96"
3811
+ url="/p/1"
3812
+ badge="New"
3813
+ title="Product"
3814
+ subtitle="Vendor"
3815
+ text="One line pitch."
3816
+ rating="5"
3817
+ ratingscale="5"
3818
+ reviews="3"
3819
+ reviewsurl="/p/1#reviews"
3820
+ price="€9"
3821
+ regularprice="€12"
3822
+ footer=""
3823
+ ></hb-shop-item-row>
3824
+ ```
3825
+
3826
+ ---
3827
+
3828
+ <a id="wc-sidebar-cards-navigator"></a>
3829
+
3830
+ ## `hb-sidebar-cards-navigator` — sidebar cards navigator
3831
+
3832
+ **Category:** layout
3833
+ **Tags:** layout, navigation
3834
+
3835
+ ### What it does
3836
+
3837
+ Stacked sidebar navigator: picks an active panel from JSON `panels` (main or first without parent), shows `hb-navbar` with back when `parentPanelId` exists, then cards of rows rendered as `hb-sidenav-button`. Emits `itemClick` with panel, card and row context; rows can switch panels via `switchToPanelId`.
3838
+
3839
+ ### Custom element
3840
+
3841
+ `hb-sidebar-cards-navigator`
3842
+
3843
+ ### Attributes (snake_case; use string values in HTML)
3844
+
3845
+ - `id`, `style` (optional): strings.
3846
+ - `panels` (optional): JSON string — `Panel[]` (`id`, optional `title`, `parentPanelId`, `cards` with `rows` of `CardRow`: `key`, `text`, optional `bootstrapIcon`, `switchToPanelId`, `type`, `badge`, etc.).
3847
+
3848
+ ### Events
3849
+
3850
+ - `itemClick`: detail matches selected row context (panel, card, row, `id`) as built in `component.wc.svelte` — see types `CardRowSelected` in `webcomponent.type.d.ts`.
3851
+
3852
+ ### Usage notes
3853
+
3854
+ - **Slots:** `skelcontent`.
3855
+ - **CSS parts:** `testpart`.
3856
+ - Type file lists a nested `event.itemClick` shape; the element dispatches the event name `itemClick` at the top level.
3857
+
3858
+ ### Minimal HTML example
3859
+
3860
+ ```html
3861
+ <hb-sidebar-cards-navigator
3862
+ panels='[{"id":"1","title":"Home","cards":[{"id":"c1","rows":[{"key":"a","text":"Item","bootstrapIcon":"house-door"}]}]}]'
3863
+ ></hb-sidebar-cards-navigator>
3864
+ ```
3865
+
3866
+ ---
3867
+
3868
+ <a id="wc-sidebar-desktop"></a>
3869
+
3870
+ ## `hb-sidebar-desktop` — sidebar desktop
3871
+
3872
+ **Category:** layout
3873
+ **Tags:** layout, navigation
3874
+
3875
+ ### What it does
3876
+
3877
+ Fixed-width desktop sidebar: optional company logo and title, header/footer slots, and a pill nav list built from `hb-sidenav-link` entries with optional JSON groups. Parses `navlinks` and `groups` from strings; emits `pageChange` when a link selects a page.
3878
+
3879
+ ### Custom element
3880
+
3881
+ `hb-sidebar-desktop`
3882
+
3883
+ ### Attributes (snake_case; use string values in HTML)
3884
+
3885
+ - `id`, `style` (optional): strings.
3886
+ - `companylogouri`, `companytitle` (optional): strings.
3887
+ - `groups` (optional): JSON string — `{ key; label }[]`.
3888
+ - `enablefooter` (optional): boolean string.
3889
+ - `navpage` (optional): string — active page key.
3890
+ - `navlinks` (optional): JSON string — `INavLink[]` for `hb-sidenav-link`.
3891
+ - `cookielawallowdecline`, `cookielawlanguage`, `cookielawuri4more` (optional): strings for cookie banner integration.
3892
+ - `onescreen` (optional): `"yes"` | `"no"` | empty — layout mode flag.
3893
+
3894
+ ### Events
3895
+
3896
+ - `pageChange`: `{ page: string }`.
3897
+
3898
+ ### Usage notes
3899
+
3900
+ - **Slots:** `test`, `header`, `footer`.
3901
+ - **CSS parts:** `header`.
3902
+ - **CSS variables:** `--bs-primary`.
3903
+ - Matches the navigation model used inside `hb-offcanvas`.
3904
+
3905
+ ### Minimal HTML example
3906
+
3907
+ ```html
3908
+ <hb-sidebar-desktop
3909
+ companytitle="Acme"
3910
+ navpage="home"
3911
+ navlinks='[{"label":"Home","key":"home","icon":"house-door"}]'
3912
+ ></hb-sidebar-desktop>
3913
+ ```
3914
+
3915
+ ---
3916
+
3917
+ <a id="wc-sidenav-button"></a>
3918
+
3919
+ ## `hb-sidenav-button` — sidenav button
3920
+
3921
+ **Category:** layout
3922
+ **Tags:** layout, navigation
3923
+
3924
+ ### What it does
3925
+
3926
+ Compact sidebar row as a nav button: optional Bootstrap icon, badge, or visual types (`switch`, `checkbox`, `radio`) from `navlink` JSON; dispatches `pageChange` with the row `key` on click. Used by `hb-sidebar-cards-navigator` and similar stacked menus.
3927
+
3928
+ ### Custom element
3929
+
3930
+ `hb-sidenav-button`
3931
+
3932
+ ### Attributes (snake_case; use string values in HTML)
3933
+
3934
+ - `id`, `style` (optional): strings.
3935
+ - `navlink` (required): JSON string — `INavLink` (`key`, `text`, optional `bootstrapIcon`, `badge`, `value`, `type`, `selected`).
3936
+
3937
+ ### Events
3938
+
3939
+ - `pageChange`: `{ page: string }` — typically the link `key`.
3940
+
3941
+ ### Usage notes
3942
+
3943
+ - **CSS parts:** `li`.
3944
+ - **CSS variables:** `--bs-primary`.
3945
+ - Storybook `nav_type` is a control helper; the shape lives on `navlink.type`.
3946
+
3947
+ ### Minimal HTML example
3948
+
3949
+ ```html
3950
+ <hb-sidenav-button
3951
+ navlink='{"text":"Home","key":"home","bootstrapIcon":"house-door"}'
3952
+ ></hb-sidenav-button>
3953
+ ```
3954
+
3955
+ ---
3956
+
3957
+ <a id="wc-sidenav-link"></a>
3958
+
3959
+ ## `hb-sidenav-link` — sidenav link
3960
+
3961
+ **Category:** layout
3962
+ **Tags:** layout, navigation
3963
+
3964
+ ### What it does
3965
+
3966
+ Sidebar nav item: Bootstrap icon, label, optional badge, and either a flat link that dispatches `pageChange` on click or an expandable group of `subLinks` with active state when `navpage` or `selected` matches. Intended for use inside `hb-sidebar-desktop` lists.
3967
+
3968
+ ### Custom element
3969
+
3970
+ `hb-sidenav-link`
3971
+
3972
+ ### Attributes (snake_case; use string values in HTML)
3973
+
3974
+ - `id`, `style` (optional): strings.
3975
+ - `navlink` (required): JSON string — `INavLink` (`label`, `key`, optional `icon`, `group`, `badge`, `subLinks`, `active`, `open`).
3976
+ - `navpage` (optional): string — current app page key for active styling.
3977
+ - `selected` (optional): boolean string — force selected appearance.
3978
+
3979
+ ### Events
3980
+
3981
+ - `pageChange`: `{ page: string }`.
3982
+
3983
+ ### Usage notes
3984
+
3985
+ - **CSS parts:** `li`.
3986
+ - **CSS variables:** `--bs-primary`.
3987
+ - Export type `INavLink` is shared with `hb-offcanvas` / `hb-sidebar-desktop` `navlinks` arrays.
3988
+
3989
+ ### Minimal HTML example
3990
+
3991
+ ```html
3992
+ <hb-sidenav-link
3993
+ navpage="home"
3994
+ navlink='{"label":"Home","key":"home","icon":"house-door"}'
3995
+ ></hb-sidenav-link>
3996
+ ```
3997
+
3998
+ ---
3999
+
4000
+ <a id="wc-site-contacts-row"></a>
4001
+
4002
+ ## `hb-site-contacts-row` — site-contacts-row
4003
+
4004
+ **Category:** content
4005
+ **Tags:** content, contact
4006
+
4007
+ ### What it does
4008
+
4009
+ Contact strip for addresses (with optional `latLng`), phones, emails, websites, and `availability` (times, appointment flag). `model` `big` / `small` or omit for auto layouts that adapt to which fields you pass.
4010
+
4011
+ ### Custom element
4012
+
4013
+ `hb-site-contacts-row`
4014
+
4015
+ ### Attributes (snake_case; use string values in HTML)
4016
+
4017
+ - `id` (optional): string.
4018
+ - `style` (optional): string (inline style).
4019
+ - `availability` (optional): JSON string — `{ icon?, times: string[], title?, appointment? }`.
4020
+ - `addresses` (optional): JSON string — `{ icon?, addresses: Address[], title? }` (`Address`: `address`, optional `latLng`, `link`, `name`).
4021
+ - `phones` (optional): JSON string — `{ icon?, phones: { name?, number }[], title? }`.
4022
+ - `emails` (optional): JSON string — `{ icon?, emails: { label?, address, name? }[], title? }`.
4023
+ - `websites` (optional): JSON string — `{ icon?, websites: { label?, url, name? }[], title? }`.
4024
+ - `model` (optional): `"big"` | `"small"`.
4025
+
4026
+ ### Events
4027
+
4028
+ - `event`: `{ test: boolean }` (integration hook per typings).
4029
+
4030
+ ### Usage notes
4031
+
4032
+ - No named slots in `extra/docs.ts`. Pass complex blocks as JSON attributes or bind after custom element upgrade.
4033
+
4034
+ ### Minimal HTML example
4035
+
4036
+ ```html
4037
+ <hb-site-contacts-row
4038
+ model="small"
4039
+ emails='{"emails":[{"label":"Info","address":"info@example.com","name":"main"}]}'
4040
+ ></hb-site-contacts-row>
4041
+ ```
4042
+
4043
+ ---
4044
+
4045
+ <a id="wc-site-paragraph-with-image"></a>
4046
+
4047
+ ## `hb-site-paragraph-with-image` — site-paragraph-with-image
4048
+
4049
+ **Category:** content
4050
+ **Tags:** content
4051
+
4052
+ ### What it does
4053
+
4054
+ Marketing block pairing an image (`img`: `src`, optional `alt`) with rich text (`text`: optional `title`, `body`, optional `link` with `label` and optional `src`, `key`, colors). Use `text_side` (`left` / `right`) and `half_space` for layout; CSS parts cover mobile and desktop. Fires `elClick` when the link is activated.
4055
+
4056
+ ### Custom element
4057
+
4058
+ `hb-site-paragraph-with-image`
4059
+
4060
+ ### Attributes (snake_case; use string values in HTML)
4061
+
4062
+ - `id` (optional), `style` (optional): strings.
4063
+ - `img` (required): JSON string — `{ src: string; alt?: string }`.
4064
+ - `text` (required): JSON string — `{ title?, body?, link?: { label; src?; key?; bgColor?; textColor? } }`.
4065
+ - `text_side` (optional): `"left"` | `"right"`.
4066
+ - `half_space` (optional): boolean as string when used from HTML.
4067
+
4068
+ ### Events
4069
+
4070
+ - `elClick`: `{ key: string }`.
4071
+
4072
+ ### Usage notes
4073
+
4074
+ - **CSS parts:** `mobile_text_content`, `mobile_title`, `mobile_text_body`, `mobile_link_button`, `mobile_image_content`, `image_content`, `text_content`, `link_button`, `title`, `text_body`.
4075
+ - No `htmlSlots` in docs; structure is prop-driven.
4076
+
4077
+ ### Minimal HTML example
4078
+
4079
+ ```html
4080
+ <hb-site-paragraph-with-image
4081
+ img='{"src":"https://example.com/image.png","alt":"Logo"}'
4082
+ text='{"title":"Heading","body":"Short copy.","link":{"label":"Read more"}}'
4083
+ text_side="right"
4084
+ ></hb-site-paragraph-with-image>
4085
+ ```
4086
+
4087
+ ---
4088
+
4089
+ <a id="wc-site-slideshow"></a>
4090
+
4091
+ ## `hb-site-slideshow` — site-slideshow
4092
+
4093
+ **Category:** content
4094
+ **Tags:** content, media
4095
+
4096
+ ### What it does
4097
+
4098
+ Full-viewport image slideshow: pass `data` as an array of slides (`href`, optional `caption`). Supports optional `index` and `timer`, dots and captions via CSS parts, and slots `overlay`, `prev`, `next`, `cover_on_images`. Dispatches slide change and hover events.
4099
+
4100
+ ### Custom element
4101
+
4102
+ `hb-site-slideshow`
4103
+
4104
+ ### Attributes (snake_case; use string values in HTML)
4105
+
4106
+ - `id` (optional), `style` (optional): strings.
4107
+ - `data` (required): JSON string — `{ href: string; caption?; index? }[]`.
4108
+ - `index` (optional): number as string — initial slide.
4109
+ - `timer` (optional): number as string — autoplay interval.
4110
+
4111
+ ### Events
4112
+
4113
+ - `changeSlide`: `{ index: number }`.
4114
+ - `onHover`: `{ index: number; hover: boolean }`.
4115
+
4116
+ ### Usage notes
4117
+
4118
+ - **CSS parts:** `dot`, `caption_container`, `caption_content`, `cover_on_images`.
4119
+ - **Slots:** `overlay`, `prev`, `next`, `cover_on_images`.
4120
+ - Declared **size** metadata: fullscreen layout.
4121
+
4122
+ ### Minimal HTML example
4123
+
4124
+ ```html
4125
+ <hb-site-slideshow
4126
+ data='[{"href":"https://example.com/a.jpg","caption":"A"},{"href":"https://example.com/b.jpg","caption":"B"}]'
4127
+ index="0"
4128
+ ></hb-site-slideshow>
4129
+ ```
4130
+
4131
+ ---
4132
+
4133
+ <a id="wc-site-slideshow-horizontal"></a>
4134
+
4135
+ ## `hb-site-slideshow-horizontal` — site-slideshow-horizontal
4136
+
4137
+ **Category:** content
4138
+ **Tags:** content, media
4139
+
4140
+ ### What it does
4141
+
4142
+ Horizontal media strip: `data` lists slides with `href`, `caption`, and optional `link`, `externalLink`, `key`, or `duration` for video-style rows. Set `type` to `videos` for that layout; optional `slide` index and `size`. Emits `slideClick` when a slide is activated.
4143
+
4144
+ ### Custom element
4145
+
4146
+ `hb-site-slideshow-horizontal`
4147
+
4148
+ ### Attributes (snake_case; use string values in HTML)
4149
+
4150
+ - `id` (optional), `style` (optional): strings.
4151
+ - `data` (required): JSON string — array of `{ href; caption?; externalLink?; link?; key?; duration?; index? }`.
4152
+ - `type` (optional): `"images"` | `"videos"`.
4153
+ - `slide` (optional): number as string (current slide).
4154
+ - `size` (optional): number as string.
4155
+
4156
+ ### Events
4157
+
4158
+ - `slideClick`: `{ key: string }`.
4159
+
4160
+ ### Usage notes
4161
+
4162
+ - **CSS parts:** `video_sub_title`, `caption_content` (see `extra/docs.ts` for full list).
4163
+
4164
+ ### Minimal HTML example
4165
+
4166
+ ```html
4167
+ <hb-site-slideshow-horizontal
4168
+ data='[{"href":"https://placehold.co/600x400","caption":"Slide 1"},{"href":"https://placehold.co/600x401","caption":"Slide 2"}]'
4169
+ ></hb-site-slideshow-horizontal>
4170
+ ```
4171
+
4172
+ ---
4173
+
4174
+ <a id="wc-skeleton-component"></a>
4175
+
4176
+ ## `hb-skeleton-component` — skeleton-component
4177
+
4178
+ **Category:** data
4179
+ **Tags:** data, loading
4180
+
4181
+ ### What it does
4182
+
4183
+ Development scaffold: accepts arbitrary `json`, `string`, and `boolean` props to test bindings, exposes a `skelcontent` slot and a `testpart` CSS part, and emits a generic `event` for wiring demos.
4184
+
4185
+ ### Custom element
4186
+
4187
+ `hb-skeleton-component`
4188
+
4189
+ ### Attributes (snake_case; use string values in HTML)
4190
+
4191
+ - `id` (optional), `style` (optional): strings.
4192
+ - `json` (optional): JSON string — any JSON-serializable value.
4193
+ - `string` (required per typings): string.
4194
+ - `boolean` (optional): boolean as string when used from HTML.
4195
+
4196
+ ### Events
4197
+
4198
+ - `event`: `{ test: boolean }`.
4199
+
4200
+ ### Usage notes
4201
+
4202
+ - **Slot:** `skelcontent`.
4203
+ - **CSS part:** `testpart`.
4204
+
4205
+ ### Minimal HTML example
4206
+
4207
+ ```html
4208
+ <hb-skeleton-component string="demo" json='{"a":0}' boolean="no"></hb-skeleton-component>
4209
+ ```
4210
+
4211
+ ---
4212
+
4213
+ <a id="wc-stylus-notebook"></a>
4214
+
4215
+ ## `hb-stylus-notebook` — stylus-notebook
4216
+
4217
+ **Category:** inputs
4218
+ **Tags:** inputs, drawing
4219
+
4220
+ ### What it does
4221
+
4222
+ Notebook-sized stylus canvas: optional `load_draw` restores saved stroke JSON; `save` configures persistence target (`name`, `type`: pdf/json/png/svg/jpg); `debug` toggles diagnostics (`yes` / `no`). Same `skelcontent` slot and `testpart` CSS part as the skeleton dev component; emits `event` on user actions.
4223
+
4224
+ ### Custom element
4225
+
4226
+ `hb-stylus-notebook`
4227
+
4228
+ ### Attributes (snake_case; use string values in HTML)
4229
+
4230
+ - `id` (optional), `style` (optional): strings.
4231
+ - `load_draw` (optional): JSON string — saved draw payload (`type`, `draw`, `id`, `draw_id`, `name`, `version`).
4232
+ - `save` (optional): JSON string — `{ name: string; type: "pdf" | "json" | "png" | "svg" | "jpg" }`.
4233
+ - `debug` (optional): `"yes"` | `"no"`.
4234
+
4235
+ ### Events
4236
+
4237
+ - `event`: `{ test: boolean }`.
4238
+
4239
+ ### Usage notes
4240
+
4241
+ - **Slot:** `skelcontent`.
4242
+ - **CSS part:** `testpart`.
4243
+ - Declared **size** metadata: fullscreen layout.
4244
+
4245
+ ### Minimal HTML example
4246
+
4247
+ ```html
4248
+ <hb-stylus-notebook debug="no"></hb-stylus-notebook>
4249
+ ```
4250
+
4251
+ ---
4252
+
4253
+ <a id="wc-stylus-paper"></a>
4254
+
4255
+ ## `hb-stylus-paper` — stylus-paper
4256
+
4257
+ **Category:** inputs
4258
+ **Tags:** inputs, drawing
4259
+
4260
+ ### What it does
4261
+
4262
+ Freehand drawing surface with modes (`draw`, `eraser`, `select`), brush `options`, `background_color` / `pen_color` / `pen_opacity`, and optional `load_draw`, `insert_image`, or `insert_text`. Supports `save_as`, paper `size`, `view` (zoom/pan locks), `goto` page index, and rich events for strokes, selection, history, save, and asset load.
4263
+
4264
+ ### Custom element
4265
+
4266
+ `hb-stylus-paper`
4267
+
4268
+ ### Attributes (snake_case; use string values in HTML)
4269
+
4270
+ - `id` (optional), `style` (optional), `draw_id` (optional): strings.
4271
+ - `background_color`, `pen_color` (optional): strings (CSS colors).
4272
+ - `pen_opacity` (optional): number as string.
4273
+ - `mode` (optional): `"eraser"` | `"draw"` | `"select"`.
4274
+ - `debug` (optional): `"yes"` | `"no"`.
4275
+ - `options` (optional): JSON string — brush options (`size`, `thinning`, `smoothing`, `streamline`, `simulatePressure`, etc.).
4276
+ - `load_draw` (optional): JSON string — full save document with `draw`, `size.paperSize`, ids, version.
4277
+ - `save_as` (optional): JSON string — `{ name; type: TSaveType }`.
4278
+ - `insert_image` (optional): JSON string — `{ name; type; uri?; base64? }`.
4279
+ - `insert_text` (optional): JSON string — `{ name; content }`.
4280
+ - `size` (optional): JSON string — paper dimensions / `paperSize` enum.
4281
+ - `view` (optional): JSON string — `{ lockPan; lockZoom; zoom; pan }`.
4282
+ - `goto` (optional): number as string.
4283
+
4284
+ ### Events
4285
+
4286
+ - `beginStroke`, `startStroke`, `endStroke`: stroke lifecycle with ids, timestamps, geometry, and `draw_id`.
4287
+ - `selection`: bounding box and selected strokes.
4288
+ - `historyIndex`, `changeIndex`: undo/redo index changes.
4289
+ - `save`: full `TSave` payload.
4290
+ - `drawLoaded`, `imageLoaded`, `txtLoaded`: load outcomes.
4291
+
4292
+ ### Usage notes
4293
+
4294
+ - No slots or CSS parts in `extra/docs.ts` for this component.
4295
+ - Declared **size** metadata: fullscreen layout.
4296
+
4297
+ ### Minimal HTML example
4298
+
4299
+ ```html
4300
+ <hb-stylus-paper mode="draw" pen_color="rgb(0,0,0)" debug="no"></hb-stylus-paper>
4301
+ ```
4302
+
4303
+ ---
4304
+
4305
+ <a id="wc-table"></a>
4306
+
4307
+ ## `hb-table` — table
4308
+
4309
+ **Category:** data
4310
+ **Tags:** data, table
4311
+
4312
+ ### What it does
4313
+
4314
+ Bootstrap-striped data table driven by JSON `headers` and `rows` (`_id` required): column sort, header search (text, enum, date range), formatted values (nested keys, datetime via dayjs), copy-to-clipboard, row highlight and `selectrow` clicks. Global `actions` and per-row `_actions` can open confirm or schema dialogs (`hb-dialog` / `hb-dialogform`). Optional multi-select with `selectactions`, `add_item` slot, and `hb-paginate` for page size, sort sync, and server-style `externalfilter` / `total` workflows. i18n via `i18nlang`.
4315
+
4316
+ ### Custom element
4317
+
4318
+ `hb-table`
4319
+
4320
+ ### Attributes (snake_case; use string values in HTML)
4321
+
4322
+ - `id` (optional), `style` (optional): strings.
4323
+ - `rows` (required): JSON string — row objects with `_id` and column keys; optional `_actions`, `_evidenced`.
4324
+ - `headers` (required): JSON string — `ITableHeader[]` (`label`, `key`, optional `type`, `format`, `search`, `click`, `select`, `nosort`, `sortBy`, `truncateAt`, `copyTxt`, `tooltip`).
4325
+ - `actions` (optional): JSON string — global `IActionButton[]`.
4326
+ - `selectactions` (optional): JSON string.
4327
+ - `selectrow`, `enableselect`, `selected` (optional): strings (selection mode / ids).
4328
+ - `size`, `page`, `pages`, `total` (optional): numbers as strings for pagination / server totals.
4329
+ - `externalfilter` (optional): boolean string — host-driven filters.
4330
+ - `disablepagination` (optional): boolean string.
4331
+ - `add_item` (optional): boolean string — show add row UI.
4332
+ - `i18nlang` (optional): string (`it`, `en`, … per registered i18n).
4333
+ - `page_size_type` (optional): `"number"` | `"select"`.
4334
+ - `page_size_options` (optional): comma-separated sizes, e.g. `"10,25,50,100"`.
4335
+ - `sort_default` (optional): string — column key for initial sort.
4336
+ - `sort_default_label` (optional): string — label for default sort option.
4337
+ - `disable_paginate_sort` (optional): boolean string.
4338
+ - `sort_strict_direction` (optional): boolean string.
4339
+ - `sort_direction` (optional): string — current sort direction.
4340
+
4341
+ ### Events
4342
+
4343
+ - `pageChange`: `{ page; pages }`.
4344
+ - `changePageSize`: `{ page_size: number }`.
4345
+ - `removeFilter`: `{ key: string }`.
4346
+ - `changeFilter`: `{ filter: IFilter }`.
4347
+ - `tableCustomActionClick` / `tableaction`: `{ itemId; action }`.
4348
+ - `cellclick`: `{ rowId; cellId }`.
4349
+ - `actiononselected`: `{ key; selectedItems: string[] }`.
4350
+ - `clickonrow`: `{ itemId }`.
4351
+ - `changeSort`: `{ sortedBy; sortedDirection }`.
4352
+ - `showConfirmModal` / `showConfirmModalForm`: modal visibility payloads with `action` and `detail: { id; show }`.
4353
+ - `confirmActionModal` / `confirmActionModalForm`: `{ action; id; confirm }`.
4354
+ - `clipboardCopyText`: `{ text: string }`.
4355
+ - `addItem`: `{ id: string }`.
4356
+
4357
+ ### Usage notes
4358
+
4359
+ - **Slots:** `add-button-content`, `buttons-container`.
4360
+ - **CSS parts:** `table`, `table-actions`, `selected-row`, `common-row`.
4361
+ - **i18n:** italian and english in docs metadata; set `i18nlang` accordingly.
4362
+ - Pair with `hb-paginate` / dialogs as in Storybook examples in `extra/docs.ts`.
4363
+
4364
+ ### Minimal HTML example
4365
+
4366
+ ```html
4367
+ <hb-table
4368
+ headers='[{"label":"Title","key":"title","type":"string"},{"label":"When","key":"time","type":"datetime"}]'
4369
+ rows='[{"_id":"1","title":"Row A","time":"2024-01-01T12:00:00.000Z"}]'
4370
+ page="1"
4371
+ pages="1"
4372
+ ></hb-table>
4373
+ ```
4374
+
4375
+ ---
4376
+
4377
+ <a id="wc-terms-doc-templates"></a>
4378
+
4379
+ ## `hb-terms-doc-templates` — terms-doc-templates
4380
+
4381
+ **Category:** content
4382
+ **Tags:** content, compliance
4383
+
4384
+ ### What it does
4385
+
4386
+ Renders legal-style documents from `data`: privacy templates with site, company, admin, and collected-data fields, or cookie policies with a `cookies` list. Use `i18nlang` with registered languages (`it`, `en`) for localized copy; emits `event` for integrations. Includes `skelcontent` slot and `testpart` CSS part (scaffold-style hooks).
4387
+
4388
+ ### Custom element
4389
+
4390
+ `hb-terms-doc-templates`
4391
+
4392
+ ### Attributes (snake_case; use string values in HTML)
4393
+
4394
+ - `id` (optional), `style` (optional): strings.
4395
+ - `i18nlang` (optional): string — e.g. `it`, `en`.
4396
+ - `data` (required): JSON string — `ITPrivacy` or `CookieContent` shape (see `types/webcomponent.type.d.ts`).
4397
+
4398
+ ### Events
4399
+
4400
+ - `event`: `{ test: boolean }`.
4401
+
4402
+ ### Usage notes
4403
+
4404
+ - **Slot:** `skelcontent`.
4405
+ - **CSS part:** `testpart`.
4406
+ - Large **`data`** payloads should be JSON strings in HTML.
4407
+
4408
+ ### Minimal HTML example
4409
+
4410
+ ```html
4411
+ <hb-terms-doc-templates
4412
+ i18nlang="en"
4413
+ data='{"id":"cookie-doc-english","site":{"name":"Example","url":"https://example.com","privacyPolicyUri":"https://example.com/privacy","cookiePolicyUri":"https://example.com/cookies"},"company":{"name":"Co","address":"1 St"},"cookies":[]}'
4414
+ ></hb-terms-doc-templates>
4415
+ ```
4416
+
4417
+ ---
4418
+
4419
+ <a id="wc-toast"></a>
4420
+
4421
+ ## `hb-toast` — toast
4422
+
4423
+ **Category:** overlays
4424
+ **Tags:** overlays, notifications
4425
+
4426
+ ### What it does
4427
+
4428
+ Bootstrap-styled toast: `show` (`yes` / `no`), `title`, `content`, optional `img`, `small`, `level`, `position`, `timeout`, string `progress` for a progress bar, and `buttons` for actions. Slots customize header and body; dispatches visibility and button `action` events. Theme aligns with Bootstrap CSS variables in docs.
4429
+
4430
+ ### Custom element
4431
+
4432
+ `hb-toast`
4433
+
4434
+ ### Attributes (snake_case; use string values in HTML)
4435
+
4436
+ - `id` (optional), `style` (optional): strings.
4437
+ - `show` (required): `"yes"` | `"no"`.
4438
+ - `title` (required), `content` (required), `img` (required per typings): strings (`img` may be URL or data URI).
4439
+ - `small` (optional): string (e.g. timestamp line).
4440
+ - `level` (optional): `"primary"` | `"secondary"` | `"success"` | `"danger"` | `"warning"` | `"info"` | `"light"` | `"dark"`.
4441
+ - `position` (optional): `"top-left"` | `"top-center"` | `"top-right"` | `"bottom-left"` | `"bottom-center"` | `"bottom-right"`.
4442
+ - `timeout` (optional): number or string — auto-hide ms.
4443
+ - `progress` (optional): string — progress bar value/label semantics per Storybook.
4444
+ - `buttons` (optional): JSON string — `TToastButton[]` (`type` confirm/cancel, optional `action`, `text`, `icon`, colors).
4445
+
4446
+ ### Events
4447
+
4448
+ - `changeVisibility`: `{ id: string; show: boolean; disappear?: boolean }`.
4449
+ - `action`: `{ id: string; action?: string }`.
4450
+
4451
+ ### Usage notes
4452
+
4453
+ - **Slots:** `header_img`, `header_strong`, `header_small`, `body`.
4454
+ - **CSS vars** in docs reference Bootstrap semantic colors.
4455
+
4456
+ ### Minimal HTML example
4457
+
4458
+ ```html
4459
+ <hb-toast
4460
+ show="yes"
4461
+ title="Notice"
4462
+ content="Hello, world!"
4463
+ img="https://via.placeholder.com/64"
4464
+ level="primary"
4465
+ ></hb-toast>
4466
+ ```
4467
+
4468
+ ---
4469
+
4470
+ <a id="wc-tooltip"></a>
4471
+
4472
+ ## `hb-tooltip` — tooltip
4473
+
4474
+ **Category:** overlays
4475
+ **Tags:** overlays, tooltip
4476
+
4477
+ ### What it does
4478
+
4479
+ Wrapper that adds a Bootstrap tooltip around slotted content. Configure via `tooltip` object: `title`, optional `description`, `placement`, `html`, `delay`, `trigger`, `style`, `maxWidth`, etc. Optional `show` can drive visibility; emits `visualizationChange` when the tooltip opens or closes.
4480
+
4481
+ ### Custom element
4482
+
4483
+ `hb-tooltip`
4484
+
4485
+ ### Attributes (snake_case; use string values in HTML)
4486
+
4487
+ - `id` (optional), `style` (optional): strings.
4488
+ - `tooltip` (optional): JSON string — `TTooltip` (`title`, `description?`, `placement?`, `html?`, `animation?`, `delay?`, `trigger?`, `customClass?`, `offset?`, `style?`, `maxWidth?`, `maxHeight?`) or plain string title per typings.
4489
+ - `show` (optional): boolean as string when used from HTML.
4490
+
4491
+ ### Events
4492
+
4493
+ - `visualizationChange`: `{ id: string; show: boolean }`.
4494
+
4495
+ ### Usage notes
4496
+
4497
+ - **Slot:** `default` — element(s) to wrap with the tooltip.
4498
+
4499
+ ### Minimal HTML example
4500
+
4501
+ ```html
4502
+ <hb-tooltip tooltip='{"title":"Help text","placement":"bottom"}'>
4503
+ <button type="button">Hover me</button>
4504
+ </hb-tooltip>
4505
+ ```
4506
+
4507
+ ---
4508
+
4509
+ <a id="wc-uploader"></a>
4510
+
4511
+ ## `hb-uploader` — uploader
4512
+
4513
+ **Category:** utilities
4514
+ **Tags:** utilities, files
4515
+
4516
+ ### What it does
4517
+
4518
+ Upload progress UI driven by `fetch_data` (`url`, `data`, optional `method`, `headers`): wraps `hb-dialog`, shows striped progress while starting, then byte progress via axios `onUploadProgress`. Optional `upload_id` identifies the nested dialog; `title` slot labels the dialog. Forwards dialog `modalShow` and emits `uploadComplete` / `uploadError` when the request finishes or fails.
4519
+
4520
+ ### Custom element
4521
+
4522
+ `hb-uploader`
4523
+
4524
+ ### Attributes (snake_case; use string values in HTML)
4525
+
4526
+ - `id` (optional), `style` (optional): strings.
4527
+ - `upload_id` (optional): string — dialog id (defaults from `id` + `_dialog` in component).
4528
+ - `fetch_data` (optional): JSON string — `{ url: string; data: any; method?; headers? }`.
4529
+
4530
+ ### Events
4531
+
4532
+ - `uploadError`: `{ completed: boolean; id: string; error: Error }`.
4533
+ - `uploadComplete`: `{ completed: boolean; id: string }`.
4534
+ - `modalShow`: forwarded from `hb-dialog` — `{ id: string; show: true }` (see dialog typings).
4535
+
4536
+ ### Usage notes
4537
+
4538
+ - **Slot:** `title` — dialog title (default “Uploading”).
4539
+ - Storybook arg names may say “download”; runtime events are **`uploadError`** / **`uploadComplete`**.
4540
+ - **CSS vars** in docs reference Bootstrap semantic colors.
4541
+
4542
+ ### Minimal HTML example
4543
+
4544
+ ```html
4545
+ <hb-uploader
4546
+ fetch_data='{"url":"https://api.example.com/upload","data":{},"method":"POST"}'
4547
+ upload_id="my-upload-dialog"
4548
+ ></hb-uploader>
4549
+ ```
4550
+
4551
+ ---
4552
+
4553
+ <a id="wc-vertical-img-txt-archive"></a>
4554
+
4555
+ ## `hb-vertical-img-txt-archive` — vertical-img-txt-archive
4556
+
4557
+ **Category:** content
4558
+ **Tags:** content, archive
4559
+
4560
+ ### What it does
4561
+
4562
+ Vertical archive grid: `collection` items with `title`, `text`, `image`, and `link` (`type`: `tab` | `page` | `event`, `uri`). Optional `subtitle` on items; optional `size` sets column count. CSS parts style `container`, `item`, `image`, `title`, and `text`. Emits `collectionItemClick` with the item `uri` when an entry is activated.
4563
+
4564
+ ### Custom element
4565
+
4566
+ `hb-vertical-img-txt-archive`
4567
+
4568
+ ### Attributes (snake_case; use string values in HTML)
4569
+
4570
+ - `id` (optional), `style` (optional): strings.
4571
+ - `collection` (required): JSON string — `Item[]` (`title`, `text`, `image`, `link`, optional `subtitle`, `index`).
4572
+ - `size` (optional): number as string — column count.
4573
+
4574
+ ### Events
4575
+
4576
+ - `collectionItemClick`: `{ uri: string }`.
4577
+
4578
+ ### Usage notes
4579
+
4580
+ - **CSS parts:** `container`, `item`, `image`, `title`, `text`.
4581
+ - No named content slots in `extra/docs.ts`.
4582
+
4583
+ ### Minimal HTML example
4584
+
4585
+ ```html
4586
+ <hb-vertical-img-txt-archive
4587
+ collection='[{"title":"One","text":"Body","image":"https://placehold.co/300x200","link":{"type":"tab","uri":"https://example.com"}}]'
4588
+ size="3"
4589
+ ></hb-vertical-img-txt-archive>
4590
+ ```
4591
+