@lmvz-ds/components 0.26.0 → 0.27.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/cjs/{reactive-controller-host-DrtMkMd7.js → aria-validation-controller-BMV2tv9-.js} +0 -41
- package/cjs/{ds.constants-8fh6ItAF.js → ds.constants-BbWUmoDv.js} +2 -0
- package/cjs/index.cjs.js +2 -1
- package/cjs/list-keyboard-controller-CzZdPBeH.js +173 -0
- package/cjs/lmvz-button_2.cjs.entry.js +4 -3
- package/cjs/lmvz-checkbox.cjs.entry.js +8 -4
- package/cjs/lmvz-chip.cjs.entry.js +4 -3
- package/cjs/lmvz-components.cjs.js +1 -1
- package/cjs/lmvz-header_2.cjs.entry.js +7 -51
- package/cjs/lmvz-input.cjs.entry.js +7 -5
- package/cjs/lmvz-menuitem.cjs.entry.js +3 -2
- package/cjs/lmvz-modal.cjs.entry.js +3 -2
- package/cjs/lmvz-radio.cjs.entry.js +3 -2
- package/cjs/lmvz-select.cjs.entry.js +3 -2
- package/cjs/lmvz-tab.cjs.entry.js +31 -0
- package/cjs/lmvz-tabs.cjs.entry.js +256 -0
- package/cjs/lmvz-toggle.cjs.entry.js +4 -3
- package/cjs/loader.cjs.js +1 -1
- package/cjs/reactive-controller-host-B_lZtcA6.js +43 -0
- package/collection/api/ds.constants.js +1 -0
- package/collection/collection-manifest.json +2 -0
- package/collection/components/lmvz-checkbox/lmvz-checkbox.css +10 -8
- package/collection/components/lmvz-checkbox/lmvz-checkbox.js +4 -1
- package/collection/components/lmvz-header/lmvz-header.js +3 -3
- package/collection/components/lmvz-input/lmvz-input.css +40 -25
- package/collection/components/lmvz-input/lmvz-input.js +33 -2
- package/collection/components/lmvz-tab/lmvz-tab.css +148 -0
- package/collection/components/lmvz-tab/lmvz-tab.js +125 -0
- package/collection/components/lmvz-tabs/lmvz-tabs.css +58 -0
- package/collection/components/lmvz-tabs/lmvz-tabs.js +399 -0
- package/collection/components/lmvz-toggle/lmvz-toggle.js +1 -1
- package/collection/index.js +2 -2
- package/collection/integration/header-integration/header-integration.js +1 -1
- package/collection/utils/aria/list-keyboard-controller.js +151 -28
- package/components/index.d.ts +4 -0
- package/components/index.d.ts.bak +4 -0
- package/components/index.js +1 -1
- package/components/lmvz-button-group.js +1 -1
- package/components/lmvz-button.js +1 -1
- package/components/lmvz-checkbox.js +1 -1
- package/components/lmvz-chip.js +1 -1
- package/components/lmvz-header.js +1 -1
- package/components/lmvz-icon.js +1 -1
- package/components/lmvz-input.js +1 -1
- package/components/lmvz-menuitem.js +1 -1
- package/components/lmvz-modal.js +1 -1
- package/components/lmvz-radio.js +1 -1
- package/components/lmvz-select.js +1 -1
- package/components/lmvz-snackbar.js +1 -1
- package/components/lmvz-tab.d.ts +11 -0
- package/components/lmvz-tab.d.ts.bak +11 -0
- package/components/lmvz-tab.js +1 -0
- package/components/lmvz-tabs.d.ts +11 -0
- package/components/lmvz-tabs.d.ts.bak +11 -0
- package/components/lmvz-tabs.js +1 -0
- package/components/lmvz-toggle.js +1 -1
- package/components/p-0P2Wb3pE.js +1 -0
- package/components/p-2VdcUIrr.js +1 -0
- package/components/p-BJEQw1Sz.js +1 -0
- package/components/p-Cs7RCOHZ.js +1 -0
- package/components/p-CtaMrBNE.js +1 -0
- package/components/{p-JAKQdFhF.js → p-DOTK1OW3.js} +1 -1
- package/components/p-DjvbwRyl.js +1 -0
- package/esm/{reactive-controller-host-ZrGf1F2-.js → aria-validation-controller-D-KO0Asb.js} +1 -41
- package/esm/{ds.constants-BOOwq5dE.js → ds.constants-HeV_qTCr.js} +2 -1
- package/esm/index.js +1 -1
- package/esm/list-keyboard-controller-Coi8XfUH.js +171 -0
- package/esm/lmvz-button_2.entry.js +2 -1
- package/esm/lmvz-checkbox.entry.js +7 -3
- package/esm/lmvz-chip.entry.js +3 -2
- package/esm/lmvz-components.js +1 -1
- package/esm/lmvz-header_2.entry.js +6 -50
- package/esm/lmvz-input.entry.js +6 -4
- package/esm/lmvz-menuitem.entry.js +2 -1
- package/esm/lmvz-modal.entry.js +2 -1
- package/esm/lmvz-radio.entry.js +2 -1
- package/esm/lmvz-select.entry.js +2 -1
- package/esm/lmvz-tab.entry.js +29 -0
- package/esm/lmvz-tabs.entry.js +254 -0
- package/esm/lmvz-toggle.entry.js +3 -2
- package/esm/loader.js +1 -1
- package/esm/reactive-controller-host-FBuCCcFC.js +41 -0
- package/hydrate/index.js +467 -36
- package/hydrate/index.mjs +467 -36
- package/lmvz-components/index.esm.js +1 -1
- package/lmvz-components/lmvz-components.esm.js +1 -1
- package/lmvz-components/p-43b463bf.entry.js +1 -0
- package/lmvz-components/p-6484fbc6.entry.js +1 -0
- package/lmvz-components/p-6988c3ea.entry.js +1 -0
- package/lmvz-components/p-758dbb82.entry.js +1 -0
- package/lmvz-components/p-7b15cdce.entry.js +1 -0
- package/lmvz-components/p-8874ff19.entry.js +1 -0
- package/lmvz-components/p-CtaMrBNE.js +1 -0
- package/lmvz-components/p-FBuCCcFC.js +1 -0
- package/lmvz-components/p-HeV_qTCr.js +1 -0
- package/lmvz-components/p-a5c921dc.entry.js +1 -0
- package/lmvz-components/p-bd23eab3.entry.js +1 -0
- package/lmvz-components/p-c5c064f1.entry.js +1 -0
- package/lmvz-components/p-c6228cee.entry.js +1 -0
- package/lmvz-components/p-cb756f95.entry.js +1 -0
- package/lmvz-components/p-da16ff58.entry.js +1 -0
- package/lmvz-components/p-hRb38wX6.js +1 -0
- package/manifest.json +440 -2
- package/package.json +9 -1
- package/types/api/ds.constants.d.ts +2 -0
- package/types/components/lmvz-checkbox/lmvz-checkbox.d.ts +1 -0
- package/types/components/lmvz-header/lmvz-header.d.ts +2 -2
- package/types/components/lmvz-input/lmvz-input.d.ts +1 -0
- package/types/components/lmvz-tab/lmvz-tab.d.ts +11 -0
- package/types/components/lmvz-tabs/lmvz-tabs.d.ts +43 -0
- package/types/components.d.ts +165 -0
- package/types/index.d.ts +2 -2
- package/types/utils/aria/list-keyboard-controller.d.ts +28 -5
- package/components/p-BOzeYzKk.js +0 -1
- package/components/p-DYa3zcGE.js +0 -1
- package/components/p-WLZ7VWNX.js +0 -1
- package/components/p-lsUdmjdw.js +0 -1
- package/lmvz-components/p-01aeca60.entry.js +0 -1
- package/lmvz-components/p-14c3d837.entry.js +0 -1
- package/lmvz-components/p-24e63b0a.entry.js +0 -1
- package/lmvz-components/p-3da301a6.entry.js +0 -1
- package/lmvz-components/p-40228d48.entry.js +0 -1
- package/lmvz-components/p-4da9073a.entry.js +0 -1
- package/lmvz-components/p-758078db.entry.js +0 -1
- package/lmvz-components/p-8dae99f1.entry.js +0 -1
- package/lmvz-components/p-BOOwq5dE.js +0 -1
- package/lmvz-components/p-CwX1wKkM.js +0 -1
- package/lmvz-components/p-e1eaa7a2.entry.js +0 -1
- package/lmvz-components/p-f5cece32.entry.js +0 -1
package/manifest.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"timestamp": "2026-06-
|
|
2
|
+
"timestamp": "2026-06-12T11:14:23",
|
|
3
3
|
"compiler": {
|
|
4
4
|
"name": "@stencil/core",
|
|
5
5
|
"version": "4.43.5",
|
|
@@ -1599,7 +1599,7 @@
|
|
|
1599
1599
|
"filePath": "src/components/lmvz-input/lmvz-input.tsx",
|
|
1600
1600
|
"encapsulation": "scoped",
|
|
1601
1601
|
"tag": "lmvz-input",
|
|
1602
|
-
"readme": "# lmvz-input\n\n\n",
|
|
1602
|
+
"readme": "# lmvz-input\n\n## Size Variants\n\nThe `size` prop controls the input's height, padding, and associated typography. Set `size` to one of `'sm'`, `'md'`, or `'lg'`. The default is `'md'`.\n\n| Size | Height | Notes |\n|------|--------|-------|\n| `sm` | ~36px | Compact variant with reduced padding |\n| `md` | ~44px | Default; balanced spacing and readability |\n| `lg` | ~48px | Expanded variant with generous padding |\n\nHeights are fluid and derive from design tokens; exact pixel values depend on user font size settings.\n",
|
|
1603
1603
|
"docs": "Input component with floating label, (form) validation, and slotted content support.",
|
|
1604
1604
|
"docsTags": [
|
|
1605
1605
|
{
|
|
@@ -5276,6 +5276,51 @@
|
|
|
5276
5276
|
"getter": false,
|
|
5277
5277
|
"setter": false
|
|
5278
5278
|
},
|
|
5279
|
+
{
|
|
5280
|
+
"name": "size",
|
|
5281
|
+
"type": "\"lg\" | \"md\" | \"sm\"",
|
|
5282
|
+
"complexType": {
|
|
5283
|
+
"original": "Input.Size",
|
|
5284
|
+
"resolved": "\"lg\" | \"md\" | \"sm\"",
|
|
5285
|
+
"references": {
|
|
5286
|
+
"Input": {
|
|
5287
|
+
"location": "import",
|
|
5288
|
+
"path": "../../api",
|
|
5289
|
+
"id": "src/api/index.d.ts::Input",
|
|
5290
|
+
"referenceLocation": "Input"
|
|
5291
|
+
}
|
|
5292
|
+
}
|
|
5293
|
+
},
|
|
5294
|
+
"mutable": false,
|
|
5295
|
+
"attr": "size",
|
|
5296
|
+
"reflectToAttr": true,
|
|
5297
|
+
"docs": "Size variant of the input",
|
|
5298
|
+
"docsTags": [
|
|
5299
|
+
{
|
|
5300
|
+
"name": "default",
|
|
5301
|
+
"text": "'md'"
|
|
5302
|
+
}
|
|
5303
|
+
],
|
|
5304
|
+
"default": "'md'",
|
|
5305
|
+
"values": [
|
|
5306
|
+
{
|
|
5307
|
+
"value": "lg",
|
|
5308
|
+
"type": "string"
|
|
5309
|
+
},
|
|
5310
|
+
{
|
|
5311
|
+
"value": "md",
|
|
5312
|
+
"type": "string"
|
|
5313
|
+
},
|
|
5314
|
+
{
|
|
5315
|
+
"value": "sm",
|
|
5316
|
+
"type": "string"
|
|
5317
|
+
}
|
|
5318
|
+
],
|
|
5319
|
+
"optional": false,
|
|
5320
|
+
"required": false,
|
|
5321
|
+
"getter": false,
|
|
5322
|
+
"setter": false
|
|
5323
|
+
},
|
|
5279
5324
|
{
|
|
5280
5325
|
"name": "spellcheck",
|
|
5281
5326
|
"type": "boolean | undefined",
|
|
@@ -6773,6 +6818,399 @@
|
|
|
6773
6818
|
]
|
|
6774
6819
|
}
|
|
6775
6820
|
},
|
|
6821
|
+
{
|
|
6822
|
+
"filePath": "src/components/lmvz-tab/lmvz-tab.tsx",
|
|
6823
|
+
"encapsulation": "shadow",
|
|
6824
|
+
"tag": "lmvz-tab",
|
|
6825
|
+
"readme": "# lmvz-tab\n\nThe `lmvz-tab` is the individual tab trigger primitive. It must be used as a direct child of `lmvz-tabs`, which owns selection state, ARIA semantics (`tablist`/`tab`/`tabpanel`), keyboard management, and roving `tabindex`.\n\n## Usage\n\n```html\n<lmvz-tabs value=\"home\">\n <lmvz-tab value=\"home\">Home</lmvz-tab>\n <lmvz-tab value=\"profile\">Profile</lmvz-tab>\n <lmvz-tab value=\"settings\" disabled>Settings</lmvz-tab>\n</lmvz-tabs>\n```\n\n### With media slot (icon above label)\n\n```html\n<lmvz-tab value=\"home\">\n <lmvz-icon slot=\"media\" name=\"home\" aria-hidden=\"true\"></lmvz-icon>\n Home\n</lmvz-tab>\n```\n\n> **Icon-only tabs**: When no visible label is provided, supply an `aria-label` on the `lmvz-tab` element itself to maintain accessibility.\n\n## Visual states\n\n| State | Description |\n| -------- | --------------------------------------------------------------------------- |\n| Default | Neutral interactive surface; hidden selection indicator. |\n| Selected | Active-tinted container; active-colored text; full-width 4 px gradient bar at bottom (horizontal) or inline-start (vertical). |\n| Disabled | Reduced opacity; non-interactive. Set by consumer via `disabled` attribute. |\n| Focus | DS-style outline ring, distinct from the selection indicator. |\n\n## Orientation\n\nThe `vertical` attribute is set automatically by `lmvz-tabs` when `orientation=\"vertical\"`. When vertical, the selection indicator bar moves from the bottom edge to the inline-start edge of the button.\n",
|
|
6826
|
+
"docs": "The tab trigger primitive. Must be used as a direct child of `lmvz-tabs`.\n\nSelection state, ARIA semantics (tablist/tab/tabpanel), keyboard management,\nand roving tabindex are all owned by the parent `lmvz-tabs` component.",
|
|
6827
|
+
"docsTags": [
|
|
6828
|
+
{
|
|
6829
|
+
"name": "slot",
|
|
6830
|
+
"text": "default - Label text or arbitrary inline content for the tab."
|
|
6831
|
+
},
|
|
6832
|
+
{
|
|
6833
|
+
"name": "slot",
|
|
6834
|
+
"text": "media - Optional icon or image placed above the label in the tab stack."
|
|
6835
|
+
},
|
|
6836
|
+
{
|
|
6837
|
+
"name": "part",
|
|
6838
|
+
"text": "button - The inner `<button role=\"tab\">` element."
|
|
6839
|
+
},
|
|
6840
|
+
{
|
|
6841
|
+
"name": "part",
|
|
6842
|
+
"text": "indicator - The selection indicator bar."
|
|
6843
|
+
}
|
|
6844
|
+
],
|
|
6845
|
+
"usage": {},
|
|
6846
|
+
"props": [
|
|
6847
|
+
{
|
|
6848
|
+
"name": "disabled",
|
|
6849
|
+
"type": "boolean",
|
|
6850
|
+
"complexType": {
|
|
6851
|
+
"original": "boolean",
|
|
6852
|
+
"resolved": "boolean",
|
|
6853
|
+
"references": {}
|
|
6854
|
+
},
|
|
6855
|
+
"mutable": false,
|
|
6856
|
+
"attr": "disabled",
|
|
6857
|
+
"reflectToAttr": true,
|
|
6858
|
+
"docs": "Whether the tab is disabled.\nDisabled tabs are not activatable and are skipped by arrow-key navigation in `lmvz-tabs`.",
|
|
6859
|
+
"docsTags": [
|
|
6860
|
+
{
|
|
6861
|
+
"name": "default",
|
|
6862
|
+
"text": "false"
|
|
6863
|
+
}
|
|
6864
|
+
],
|
|
6865
|
+
"default": "false",
|
|
6866
|
+
"values": [
|
|
6867
|
+
{
|
|
6868
|
+
"type": "boolean"
|
|
6869
|
+
}
|
|
6870
|
+
],
|
|
6871
|
+
"optional": false,
|
|
6872
|
+
"required": false,
|
|
6873
|
+
"getter": false,
|
|
6874
|
+
"setter": false
|
|
6875
|
+
},
|
|
6876
|
+
{
|
|
6877
|
+
"name": "selected",
|
|
6878
|
+
"type": "boolean",
|
|
6879
|
+
"complexType": {
|
|
6880
|
+
"original": "boolean",
|
|
6881
|
+
"resolved": "boolean",
|
|
6882
|
+
"references": {}
|
|
6883
|
+
},
|
|
6884
|
+
"mutable": false,
|
|
6885
|
+
"attr": "selected",
|
|
6886
|
+
"reflectToAttr": true,
|
|
6887
|
+
"docs": "Whether this tab is currently selected.\nSet by the parent `lmvz-tabs` component — do not set manually.",
|
|
6888
|
+
"docsTags": [
|
|
6889
|
+
{
|
|
6890
|
+
"name": "default",
|
|
6891
|
+
"text": "false"
|
|
6892
|
+
}
|
|
6893
|
+
],
|
|
6894
|
+
"default": "false",
|
|
6895
|
+
"values": [
|
|
6896
|
+
{
|
|
6897
|
+
"type": "boolean"
|
|
6898
|
+
}
|
|
6899
|
+
],
|
|
6900
|
+
"optional": false,
|
|
6901
|
+
"required": false,
|
|
6902
|
+
"getter": false,
|
|
6903
|
+
"setter": false
|
|
6904
|
+
},
|
|
6905
|
+
{
|
|
6906
|
+
"name": "value",
|
|
6907
|
+
"type": "string",
|
|
6908
|
+
"complexType": {
|
|
6909
|
+
"original": "string",
|
|
6910
|
+
"resolved": "string",
|
|
6911
|
+
"references": {}
|
|
6912
|
+
},
|
|
6913
|
+
"mutable": false,
|
|
6914
|
+
"attr": "value",
|
|
6915
|
+
"reflectToAttr": true,
|
|
6916
|
+
"docs": "Unique value that identifies this tab within its `lmvz-tabs` parent.\nThe parent uses this to track the selected tab.",
|
|
6917
|
+
"docsTags": [],
|
|
6918
|
+
"values": [
|
|
6919
|
+
{
|
|
6920
|
+
"type": "string"
|
|
6921
|
+
}
|
|
6922
|
+
],
|
|
6923
|
+
"optional": false,
|
|
6924
|
+
"required": true,
|
|
6925
|
+
"getter": false,
|
|
6926
|
+
"setter": false
|
|
6927
|
+
},
|
|
6928
|
+
{
|
|
6929
|
+
"name": "vertical",
|
|
6930
|
+
"type": "boolean",
|
|
6931
|
+
"complexType": {
|
|
6932
|
+
"original": "boolean",
|
|
6933
|
+
"resolved": "boolean",
|
|
6934
|
+
"references": {}
|
|
6935
|
+
},
|
|
6936
|
+
"mutable": false,
|
|
6937
|
+
"attr": "vertical",
|
|
6938
|
+
"reflectToAttr": true,
|
|
6939
|
+
"docs": "Vertical orientation context.\nSet by the parent `lmvz-tabs` when `orientation=\"vertical\"` — do not set manually.\nWhen true the selection indicator moves to the inline-start edge.",
|
|
6940
|
+
"docsTags": [
|
|
6941
|
+
{
|
|
6942
|
+
"name": "default",
|
|
6943
|
+
"text": "false"
|
|
6944
|
+
}
|
|
6945
|
+
],
|
|
6946
|
+
"default": "false",
|
|
6947
|
+
"values": [
|
|
6948
|
+
{
|
|
6949
|
+
"type": "boolean"
|
|
6950
|
+
}
|
|
6951
|
+
],
|
|
6952
|
+
"optional": false,
|
|
6953
|
+
"required": false,
|
|
6954
|
+
"getter": false,
|
|
6955
|
+
"setter": false
|
|
6956
|
+
}
|
|
6957
|
+
],
|
|
6958
|
+
"methods": [],
|
|
6959
|
+
"events": [],
|
|
6960
|
+
"listeners": [],
|
|
6961
|
+
"styles": [],
|
|
6962
|
+
"slots": [
|
|
6963
|
+
{
|
|
6964
|
+
"name": "default",
|
|
6965
|
+
"docs": "Label text or arbitrary inline content for the tab."
|
|
6966
|
+
},
|
|
6967
|
+
{
|
|
6968
|
+
"name": "media",
|
|
6969
|
+
"docs": "Optional icon or image placed above the label in the tab stack."
|
|
6970
|
+
}
|
|
6971
|
+
],
|
|
6972
|
+
"parts": [
|
|
6973
|
+
{
|
|
6974
|
+
"name": "button",
|
|
6975
|
+
"docs": "The inner `<button role=\"tab\">` element."
|
|
6976
|
+
},
|
|
6977
|
+
{
|
|
6978
|
+
"name": "indicator",
|
|
6979
|
+
"docs": "The selection indicator bar."
|
|
6980
|
+
}
|
|
6981
|
+
],
|
|
6982
|
+
"states": [],
|
|
6983
|
+
"dependents": [],
|
|
6984
|
+
"dependencies": [],
|
|
6985
|
+
"dependencyGraph": {}
|
|
6986
|
+
},
|
|
6987
|
+
{
|
|
6988
|
+
"filePath": "src/components/lmvz-tabs/lmvz-tabs.tsx",
|
|
6989
|
+
"encapsulation": "shadow",
|
|
6990
|
+
"tag": "lmvz-tabs",
|
|
6991
|
+
"readme": "# lmvz-tabs\n\n`lmvz-tabs` is the WAI-ARIA Tabs pattern owner. It renders a `tablist` containing `lmvz-tab` trigger children and links them to consumer-authored panel elements via `aria-controls` / `aria-labelledby`. Selection state, keyboard management (roving `tabindex`, directional focus, manual activation), disabled-tab skipping, and overflow behaviour are all owned here.\n\n## Usage\n\n```html\n<lmvz-tabs value=\"home\" id=\"my-tabs\">\n <lmvz-tab value=\"home\">Home</lmvz-tab>\n <lmvz-tab value=\"profile\">Profile</lmvz-tab>\n <lmvz-tab value=\"settings\" disabled>Settings</lmvz-tab>\n\n <div slot=\"panels\" role=\"tabpanel\" id=\"panel-home\">Home content</div>\n <div slot=\"panels\" role=\"tabpanel\" id=\"panel-profile\" hidden>Profile content</div>\n <div slot=\"panels\" role=\"tabpanel\" id=\"panel-settings\" hidden>Settings content</div>\n</lmvz-tabs>\n```\n\n### Panels — slotted content model\n\nPanels are **consumer-authored** light-DOM elements placed in the `panels` slot. The component does **not** own or render a `lmvz-tab-panel` primitive — consumers supply any element they like (a `<div>`, a custom element, a route outlet, …).\n\n`lmvz-tabs` automatically pairs each panel with the corresponding tab by position:\n- It sets `aria-controls=\"<panelId>\"` on each `lmvz-tab` button.\n- It sets `aria-labelledby=\"<tabId>\"` on each panel element.\n\nIf you need an explicit mapping instead of positional pairing, call the `setTabPanelIds` method with an ordered array of `[tabId, panelId]` tuples.\n\nPanel **visibility** (the `hidden` attribute) is the consumer's responsibility. Listen to the `lmvzChange` event and toggle the relevant panel.\n\n### Reacting to tab changes\n\n```ts\nconst tabs = document.querySelector('lmvz-tabs');\n\ntabs.addEventListener('lmvzChange', (event) => {\n const { value } = event.detail; // the newly-activated tab value\n // show/hide panels as appropriate\n});\n```\n\n### Vertical orientation\n\n```html\n<lmvz-tabs value=\"home\" orientation=\"vertical\">\n <lmvz-tab value=\"home\">Home</lmvz-tab>\n <lmvz-tab value=\"profile\">Profile</lmvz-tab>\n <div slot=\"panels\" role=\"tabpanel\">Home content</div>\n <div slot=\"panels\" role=\"tabpanel\" hidden>Profile content</div>\n</lmvz-tabs>\n```\n\nWhen `orientation=\"vertical\"` the tab list stacks vertically, arrow navigation switches to up/down, and the selection indicator moves to the inline-start edge of each tab trigger.\n\n## Keyboard interaction\n\n| Key | Behaviour |\n| --------------------- | -------------------------------------------------------- |\n| `←` / `→` (horizontal) | Move focus to previous / next enabled tab. |\n| `↑` / `↓` (vertical) | Move focus to previous / next enabled tab. |\n| `Home` | Move focus to the first enabled tab. |\n| `End` | Move focus to the last enabled tab. |\n| `Enter` / `Space` | Activate the currently focused tab (manual activation). |\n| `Tab` | Leave the tab list; focus moves to the active panel. |\n\nDisabled tabs are skipped during arrow-key navigation and cannot be activated.\n\n## Disabled-tab fallback\n\nWhen the selected tab becomes disabled at runtime, `lmvz-tabs` automatically activates the nearest enabled tab (preferring the next sibling, then the previous). If no enabled tab exists the selection value is left unchanged.\n",
|
|
6992
|
+
"docs": "The semantics and state owner for the WAI-ARIA tabs pattern.\n\n`lmvz-tabs` owns:\n- `tablist` / `tab` / `tabpanel` ARIA semantics\n- Selected-value state and manual activation (`Enter`, `Space`, click)\n- Roving `tabindex` via `DirectionalFocusController`\n- Horizontal scroll overflow (horizontal mode only)\n- Disabled-tab skipping and nearest-enabled fallback\n- Child registration and panel linkage via `aria-controls` / `aria-labelledby`\n\nPanels are consumer-authored light-DOM elements. Associate each panel with\nits tab by adding an `id` attribute — either matching `lmvz-tab[panel]` or\nderived positionally when no explicit id is provided.",
|
|
6993
|
+
"docsTags": [
|
|
6994
|
+
{
|
|
6995
|
+
"name": "slot",
|
|
6996
|
+
"text": "default - `lmvz-tab` trigger elements."
|
|
6997
|
+
},
|
|
6998
|
+
{
|
|
6999
|
+
"name": "slot",
|
|
7000
|
+
"text": "panels - Arbitrary panel elements."
|
|
7001
|
+
},
|
|
7002
|
+
{
|
|
7003
|
+
"name": "part",
|
|
7004
|
+
"text": "panels-container - The container wrapping the slotted panels."
|
|
7005
|
+
},
|
|
7006
|
+
{
|
|
7007
|
+
"name": "event",
|
|
7008
|
+
"text": "lmvzChange - Fired when a tab is activated. Detail: `{ value: string }`."
|
|
7009
|
+
},
|
|
7010
|
+
{
|
|
7011
|
+
"name": "example",
|
|
7012
|
+
"text": "```html\n<lmvz-tabs value=\"home\">\n <lmvz-tab value=\"home\">Home</lmvz-tab>\n <lmvz-tab value=\"settings\" disabled>Settings</lmvz-tab>\n\n <div slot=\"panels\" id=\"panel-home\" role=\"tabpanel\">Home content</div>\n <div slot=\"panels\" id=\"panel-settings\" role=\"tabpanel\">Settings content</div>\n</lmvz-tabs>\n```"
|
|
7013
|
+
}
|
|
7014
|
+
],
|
|
7015
|
+
"usage": {},
|
|
7016
|
+
"props": [
|
|
7017
|
+
{
|
|
7018
|
+
"name": "orientation",
|
|
7019
|
+
"type": "\"horizontal\" | \"vertical\"",
|
|
7020
|
+
"complexType": {
|
|
7021
|
+
"original": "'horizontal' | 'vertical'",
|
|
7022
|
+
"resolved": "\"horizontal\" | \"vertical\"",
|
|
7023
|
+
"references": {}
|
|
7024
|
+
},
|
|
7025
|
+
"mutable": true,
|
|
7026
|
+
"attr": "orientation",
|
|
7027
|
+
"reflectToAttr": true,
|
|
7028
|
+
"docs": "Layout and keyboard-navigation orientation.",
|
|
7029
|
+
"docsTags": [
|
|
7030
|
+
{
|
|
7031
|
+
"name": "default",
|
|
7032
|
+
"text": "'horizontal'"
|
|
7033
|
+
}
|
|
7034
|
+
],
|
|
7035
|
+
"default": "'horizontal'",
|
|
7036
|
+
"values": [
|
|
7037
|
+
{
|
|
7038
|
+
"value": "horizontal",
|
|
7039
|
+
"type": "string"
|
|
7040
|
+
},
|
|
7041
|
+
{
|
|
7042
|
+
"value": "vertical",
|
|
7043
|
+
"type": "string"
|
|
7044
|
+
}
|
|
7045
|
+
],
|
|
7046
|
+
"optional": false,
|
|
7047
|
+
"required": false,
|
|
7048
|
+
"getter": false,
|
|
7049
|
+
"setter": false
|
|
7050
|
+
},
|
|
7051
|
+
{
|
|
7052
|
+
"name": "value",
|
|
7053
|
+
"type": "string",
|
|
7054
|
+
"complexType": {
|
|
7055
|
+
"original": "string",
|
|
7056
|
+
"resolved": "string",
|
|
7057
|
+
"references": {}
|
|
7058
|
+
},
|
|
7059
|
+
"mutable": true,
|
|
7060
|
+
"attr": "value",
|
|
7061
|
+
"reflectToAttr": true,
|
|
7062
|
+
"docs": "The `value` of the currently selected tab.",
|
|
7063
|
+
"docsTags": [],
|
|
7064
|
+
"values": [
|
|
7065
|
+
{
|
|
7066
|
+
"type": "string"
|
|
7067
|
+
}
|
|
7068
|
+
],
|
|
7069
|
+
"optional": false,
|
|
7070
|
+
"required": true,
|
|
7071
|
+
"getter": false,
|
|
7072
|
+
"setter": false
|
|
7073
|
+
}
|
|
7074
|
+
],
|
|
7075
|
+
"methods": [
|
|
7076
|
+
{
|
|
7077
|
+
"name": "activateTab",
|
|
7078
|
+
"returns": {
|
|
7079
|
+
"type": "Promise<void>",
|
|
7080
|
+
"docs": ""
|
|
7081
|
+
},
|
|
7082
|
+
"complexType": {
|
|
7083
|
+
"signature": "(value: string) => Promise<void>",
|
|
7084
|
+
"parameters": [
|
|
7085
|
+
{
|
|
7086
|
+
"name": "value",
|
|
7087
|
+
"type": "string",
|
|
7088
|
+
"docs": ""
|
|
7089
|
+
}
|
|
7090
|
+
],
|
|
7091
|
+
"references": {
|
|
7092
|
+
"Promise": {
|
|
7093
|
+
"location": "global",
|
|
7094
|
+
"id": "global::Promise"
|
|
7095
|
+
}
|
|
7096
|
+
},
|
|
7097
|
+
"return": "Promise<void>"
|
|
7098
|
+
},
|
|
7099
|
+
"signature": "activateTab(value: string) => Promise<void>",
|
|
7100
|
+
"parameters": [
|
|
7101
|
+
{
|
|
7102
|
+
"name": "value",
|
|
7103
|
+
"type": "string",
|
|
7104
|
+
"docs": ""
|
|
7105
|
+
}
|
|
7106
|
+
],
|
|
7107
|
+
"docs": "Programmatically activate a tab by value.\nDisabled tabs are ignored; emits `lmvzChange` on change.",
|
|
7108
|
+
"docsTags": []
|
|
7109
|
+
},
|
|
7110
|
+
{
|
|
7111
|
+
"name": "getTabElements",
|
|
7112
|
+
"returns": {
|
|
7113
|
+
"type": "Promise<HTMLElement[]>",
|
|
7114
|
+
"docs": ""
|
|
7115
|
+
},
|
|
7116
|
+
"complexType": {
|
|
7117
|
+
"signature": "() => Promise<HTMLElement[]>",
|
|
7118
|
+
"parameters": [],
|
|
7119
|
+
"references": {
|
|
7120
|
+
"Promise": {
|
|
7121
|
+
"location": "global",
|
|
7122
|
+
"id": "global::Promise"
|
|
7123
|
+
},
|
|
7124
|
+
"HTMLElement": {
|
|
7125
|
+
"location": "global",
|
|
7126
|
+
"id": "global::HTMLElement"
|
|
7127
|
+
}
|
|
7128
|
+
},
|
|
7129
|
+
"return": "Promise<HTMLElement[]>"
|
|
7130
|
+
},
|
|
7131
|
+
"signature": "getTabElements() => Promise<HTMLElement[]>",
|
|
7132
|
+
"parameters": [],
|
|
7133
|
+
"docs": "Returns all slotted `lmvz-tab` elements.\nExposed for external orchestration.",
|
|
7134
|
+
"docsTags": []
|
|
7135
|
+
},
|
|
7136
|
+
{
|
|
7137
|
+
"name": "setTabPanelIds",
|
|
7138
|
+
"returns": {
|
|
7139
|
+
"type": "Promise<void>",
|
|
7140
|
+
"docs": ""
|
|
7141
|
+
},
|
|
7142
|
+
"complexType": {
|
|
7143
|
+
"signature": "(pairs: Array<[string, string]>) => Promise<void>",
|
|
7144
|
+
"parameters": [
|
|
7145
|
+
{
|
|
7146
|
+
"name": "pairs",
|
|
7147
|
+
"type": "[string, string][]",
|
|
7148
|
+
"docs": ""
|
|
7149
|
+
}
|
|
7150
|
+
],
|
|
7151
|
+
"references": {
|
|
7152
|
+
"Promise": {
|
|
7153
|
+
"location": "global",
|
|
7154
|
+
"id": "global::Promise"
|
|
7155
|
+
},
|
|
7156
|
+
"Array": {
|
|
7157
|
+
"location": "global",
|
|
7158
|
+
"id": "global::Array"
|
|
7159
|
+
}
|
|
7160
|
+
},
|
|
7161
|
+
"return": "Promise<void>"
|
|
7162
|
+
},
|
|
7163
|
+
"signature": "setTabPanelIds(pairs: Array<[string, string]>) => Promise<void>",
|
|
7164
|
+
"parameters": [
|
|
7165
|
+
{
|
|
7166
|
+
"name": "pairs",
|
|
7167
|
+
"type": "[string, string][]",
|
|
7168
|
+
"docs": ""
|
|
7169
|
+
}
|
|
7170
|
+
],
|
|
7171
|
+
"docs": "Wires `aria-controls` on each tab and `aria-labelledby` on each panel\nusing the provided ordered array of `[tabId, panelId]` pairs.\nCallers only need this for explicit control; `lmvz-tabs` wires positional\npairs automatically on `slotchange`.",
|
|
7172
|
+
"docsTags": []
|
|
7173
|
+
}
|
|
7174
|
+
],
|
|
7175
|
+
"events": [
|
|
7176
|
+
{
|
|
7177
|
+
"event": "lmvzChange",
|
|
7178
|
+
"detail": "{ value: string; }",
|
|
7179
|
+
"bubbles": true,
|
|
7180
|
+
"complexType": {
|
|
7181
|
+
"original": "{ value: string }",
|
|
7182
|
+
"resolved": "{ value: string; }",
|
|
7183
|
+
"references": {}
|
|
7184
|
+
},
|
|
7185
|
+
"cancelable": true,
|
|
7186
|
+
"composed": true,
|
|
7187
|
+
"docs": "Emitted when a tab is activated.\nDetail: `{ value: string }`.",
|
|
7188
|
+
"docsTags": []
|
|
7189
|
+
}
|
|
7190
|
+
],
|
|
7191
|
+
"listeners": [],
|
|
7192
|
+
"styles": [],
|
|
7193
|
+
"slots": [
|
|
7194
|
+
{
|
|
7195
|
+
"name": "default",
|
|
7196
|
+
"docs": "`lmvz-tab` trigger elements."
|
|
7197
|
+
},
|
|
7198
|
+
{
|
|
7199
|
+
"name": "panels",
|
|
7200
|
+
"docs": "Arbitrary panel elements."
|
|
7201
|
+
}
|
|
7202
|
+
],
|
|
7203
|
+
"parts": [
|
|
7204
|
+
{
|
|
7205
|
+
"name": "panels-container",
|
|
7206
|
+
"docs": "The container wrapping the slotted panels."
|
|
7207
|
+
}
|
|
7208
|
+
],
|
|
7209
|
+
"states": [],
|
|
7210
|
+
"dependents": [],
|
|
7211
|
+
"dependencies": [],
|
|
7212
|
+
"dependencyGraph": {}
|
|
7213
|
+
},
|
|
6776
7214
|
{
|
|
6777
7215
|
"filePath": "src/components/lmvz-toggle/lmvz-toggle.tsx",
|
|
6778
7216
|
"encapsulation": "scoped",
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lmvz-ds/components",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.27.1",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "The components of the design system",
|
|
7
7
|
"author": "Patrick Nemenz <patrick.nemenz@adesso.at>",
|
|
@@ -76,6 +76,14 @@
|
|
|
76
76
|
"types": "./components/lmvz-snackbar.d.ts",
|
|
77
77
|
"import": "./components/lmvz-snackbar.js"
|
|
78
78
|
},
|
|
79
|
+
"./lmvz-tab": {
|
|
80
|
+
"types": "./components/lmvz-tab.d.ts",
|
|
81
|
+
"import": "./components/lmvz-tab.js"
|
|
82
|
+
},
|
|
83
|
+
"./lmvz-tabs": {
|
|
84
|
+
"types": "./components/lmvz-tabs.d.ts",
|
|
85
|
+
"import": "./components/lmvz-tabs.js"
|
|
86
|
+
},
|
|
79
87
|
"./lmvz-checkbox": {
|
|
80
88
|
"import": "./components/lmvz-checkbox.js",
|
|
81
89
|
"types": "./components/lmvz-checkbox.d.ts"
|
|
@@ -3,6 +3,7 @@ export declare const scaleValues: readonly ["small", "default", "large"];
|
|
|
3
3
|
export declare const sizes: readonly ["xs", "sm", "md", "lg"];
|
|
4
4
|
export declare const textSizes: readonly ["xs", "sm", "md", "lg", "xl"];
|
|
5
5
|
export declare const inputTypes: readonly ["text", "email", "password", "tel", "url", "search", "number"];
|
|
6
|
+
export declare const inputSizes: readonly ["sm", "md", "lg"];
|
|
6
7
|
export declare const iconSizes: readonly ["xs", "sm", "md", "lg", "inherit"];
|
|
7
8
|
export declare const iconWeights: readonly ["thin", "medium", "bold"];
|
|
8
9
|
export declare const chipTypes: readonly ["active", "warning", "success", "error", "neutral"];
|
|
@@ -28,6 +29,7 @@ export declare namespace Icon {
|
|
|
28
29
|
}
|
|
29
30
|
export declare namespace Input {
|
|
30
31
|
type Type = (typeof inputTypes)[number];
|
|
32
|
+
type Size = (typeof inputSizes)[number];
|
|
31
33
|
type Autocomplete = HTMLInputElement['autocomplete'];
|
|
32
34
|
type Inputmode = 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url';
|
|
33
35
|
type Autocapitalize = 'off' | 'none' | 'on' | 'sentences' | 'words' | 'characters';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type AriaValidationHost } from '../../utils/aria/aria-validation-controller';
|
|
2
|
-
import { type
|
|
2
|
+
import { type DirectionalFocusHost } from '../../utils/aria/list-keyboard-controller';
|
|
3
3
|
import { ReactiveControllerHost } from '../../utils/reactive-controller-host';
|
|
4
|
-
export declare class LmvzHeader extends ReactiveControllerHost implements AriaValidationHost,
|
|
4
|
+
export declare class LmvzHeader extends ReactiveControllerHost implements AriaValidationHost, DirectionalFocusHost {
|
|
5
5
|
readonly el: HTMLElement;
|
|
6
6
|
get validationEl(): HTMLElement;
|
|
7
7
|
private primarySlot?;
|
|
@@ -39,6 +39,7 @@ export declare class LmvzInput extends ReactiveControllerHost implements AriaVal
|
|
|
39
39
|
max?: number | string;
|
|
40
40
|
step?: number | string;
|
|
41
41
|
form?: string;
|
|
42
|
+
size: Input.Size;
|
|
42
43
|
get error(): boolean;
|
|
43
44
|
set error(value: boolean);
|
|
44
45
|
setValue(newValue: string | undefined): Promise<void>;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type EventEmitter } from '../../stencil-public-runtime';
|
|
2
|
+
import { type DirectionalFocusHost } from '../../utils/aria/list-keyboard-controller';
|
|
3
|
+
import { ReactiveControllerHost } from '../../utils/reactive-controller-host';
|
|
4
|
+
export declare class LmvzTabs extends ReactiveControllerHost implements DirectionalFocusHost {
|
|
5
|
+
readonly el: HTMLElement;
|
|
6
|
+
private readonly instanceId;
|
|
7
|
+
private tabSlotEl?;
|
|
8
|
+
private panelSlotEl?;
|
|
9
|
+
private focusController;
|
|
10
|
+
value: string;
|
|
11
|
+
orientation: 'horizontal' | 'vertical';
|
|
12
|
+
lmvzChange: EventEmitter<{
|
|
13
|
+
value: string;
|
|
14
|
+
}>;
|
|
15
|
+
private resolvedValue?;
|
|
16
|
+
constructor();
|
|
17
|
+
componentWillLoad(): void;
|
|
18
|
+
componentDidLoad(): void;
|
|
19
|
+
disconnectedCallback(): void;
|
|
20
|
+
handleValueChange(newValue: string): void;
|
|
21
|
+
handleOrientationChange(): void;
|
|
22
|
+
activateTab(value: string): Promise<void>;
|
|
23
|
+
getTabElements(): Promise<HTMLElement[]>;
|
|
24
|
+
setTabPanelIds(pairs: Array<[string, string]>): Promise<void>;
|
|
25
|
+
private get slottedTabs();
|
|
26
|
+
private get slottedPanels();
|
|
27
|
+
private readonly handleTabSlotChange;
|
|
28
|
+
private readonly handlePanelSlotChange;
|
|
29
|
+
private readonly handleTabReady;
|
|
30
|
+
private updateIconTabsAttr;
|
|
31
|
+
private syncFocusTargets;
|
|
32
|
+
private syncOrientation;
|
|
33
|
+
private syncTabOrientation;
|
|
34
|
+
private wireAriaIds;
|
|
35
|
+
private applySelection;
|
|
36
|
+
private isTabDisabled;
|
|
37
|
+
private findTabByValue;
|
|
38
|
+
private findNearestEnabled;
|
|
39
|
+
private selectTab;
|
|
40
|
+
private readonly handleTabClick;
|
|
41
|
+
private readonly handleKeydown;
|
|
42
|
+
render(): any;
|
|
43
|
+
}
|