@lion/ui 0.22.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -0
- package/components/combobox/src/LionCombobox.js +10 -2
- package/components/combobox/test/lion-combobox.test.js +31 -0
- package/components/form-core/src/choice-group/ChoiceGroupMixin.js +7 -0
- package/components/form-core/types/choice-group/ChoiceGroupMixinTypes.ts +5 -0
- package/components/input-amount/src/LionInputAmount.js +17 -6
- package/components/input-amount/src/formatters.js +5 -3
- package/components/input-amount/test/formatters.test.js +88 -74
- package/components/input-amount/test/lion-input-amount.test.js +51 -36
- package/components/input-tel/test/validators.test.js +9 -0
- package/components/listbox/src/ListboxMixin.js +19 -3
- package/components/listbox/types/ListboxMixinTypes.ts +7 -1
- package/components/menu/README.md +360 -0
- package/components/menu/src/InteractiveListMixin.js +867 -0
- package/components/menu/src/LionMenu.js +436 -0
- package/components/menu/src/MoreButtonMenuMixin.js +295 -0
- package/components/menu/src/MultiLevelListMixin.js +312 -0
- package/components/menu/src/utils/isInView.js +26 -0
- package/components/menu/src/utils/listItemInteractions.js +124 -0
- package/components/menu/test/InteractiveListMixin.test.js +3 -0
- package/components/menu/test/MoreButtonMenuMixin.test.js +4 -0
- package/components/menu/test/MultiLevelListMixin.test.js +3 -0
- package/components/menu/test/lion-menu-interactions.test.js +3 -0
- package/components/menu/test/lion-menu.test.js +14 -0
- package/components/menu/test-helpers/mimicKeyPress.js +9 -0
- package/components/menu/test-suites/InteractiveListMixin.suite.js +537 -0
- package/components/menu/test-suites/LionMenu.suite.js +114 -0
- package/components/menu/test-suites/LionMenuInteractions.suite.js +583 -0
- package/components/menu/test-suites/MoreButtonMenuMixin.suite.js +372 -0
- package/components/menu/test-suites/MultiLevelListMixin.suite.js +309 -0
- package/components/menu/types/InteractiveListMixinTypes.ts +126 -0
- package/components/menu/types/MoreButtonMenuMixinTypes.ts +51 -0
- package/components/menu/types/MultiLevelListMixinTypes.ts +28 -0
- package/components/menu/types/OverlayWithListInvokerMixinTypes.ts +61 -0
- package/components/overlays/NEXT.md +49 -0
- package/components/overlays/src/OverlayController.js +304 -125
- package/components/overlays/src/OverlayMixin.js +81 -17
- package/components/overlays/src/utils/adopt-styles.js +1 -1
- package/components/overlays/src/utils/is-equal-config.js +15 -6
- package/components/overlays/test/OverlayController.test.js +223 -25
- package/components/overlays/test-suites/OverlayMixin.suite.js +8 -8
- package/components/overlays/types/ArrowMixinTypes.ts +1 -3
- package/components/overlays/types/OverlayConfig.ts +20 -5
- package/components/overlays/types/OverlayMixinTypes.ts +2 -0
- package/components/select-rich/src/LionSelectRich.js +12 -0
- package/components/select-rich/test/lion-select-rich-interaction.test.js +53 -0
- package/components/select-rich/test/lion-select-rich-upgrade.test.js +30 -0
- package/custom-elements.json +3120 -149
- package/dist-types/components/combobox/src/LionCombobox.d.ts +1 -1
- package/dist-types/components/combobox/src/LionCombobox.d.ts.map +1 -1
- package/dist-types/components/dialog/src/LionDialog.d.ts +6 -2
- package/dist-types/components/dialog/src/LionDialog.d.ts.map +1 -1
- package/dist-types/components/form-core/src/choice-group/ChoiceGroupMixin.d.ts.map +1 -1
- package/dist-types/components/form-core/types/choice-group/ChoiceGroupMixinTypes.d.ts +5 -0
- package/dist-types/components/form-core/types/choice-group/ChoiceGroupMixinTypes.d.ts.map +1 -1
- package/dist-types/components/input-amount/src/LionInputAmount.d.ts +3 -1
- package/dist-types/components/input-amount/src/LionInputAmount.d.ts.map +1 -1
- package/dist-types/components/input-amount/src/formatters.d.ts +6 -4
- package/dist-types/components/input-amount/src/formatters.d.ts.map +1 -1
- package/dist-types/components/input-datepicker/src/LionInputDatepicker.d.ts +1 -1
- package/dist-types/components/listbox/src/ListboxMixin.d.ts.map +1 -1
- package/dist-types/components/listbox/types/ListboxMixinTypes.d.ts +7 -1
- package/dist-types/components/listbox/types/ListboxMixinTypes.d.ts.map +1 -1
- package/dist-types/components/menu/src/InteractiveListMixin.d.ts +35 -0
- package/dist-types/components/menu/src/InteractiveListMixin.d.ts.map +1 -0
- package/dist-types/components/menu/src/LionMenu.d.ts +129 -0
- package/dist-types/components/menu/src/LionMenu.d.ts.map +1 -0
- package/dist-types/components/menu/src/MoreButtonMenuMixin.d.ts +8 -0
- package/dist-types/components/menu/src/MoreButtonMenuMixin.d.ts.map +1 -0
- package/dist-types/components/menu/src/MultiLevelListMixin.d.ts +7 -0
- package/dist-types/components/menu/src/MultiLevelListMixin.d.ts.map +1 -0
- package/dist-types/components/menu/src/utils/isInView.d.ts +9 -0
- package/dist-types/components/menu/src/utils/isInView.d.ts.map +1 -0
- package/dist-types/components/menu/src/utils/listItemInteractions.d.ts +48 -0
- package/dist-types/components/menu/src/utils/listItemInteractions.d.ts.map +1 -0
- package/dist-types/components/menu/test/InteractiveListMixin.test.d.ts +2 -0
- package/dist-types/components/menu/test/InteractiveListMixin.test.d.ts.map +1 -0
- package/dist-types/components/menu/test/MoreButtonMenuMixin.test.d.ts +2 -0
- package/dist-types/components/menu/test/MoreButtonMenuMixin.test.d.ts.map +1 -0
- package/dist-types/components/menu/test/MultiLevelListMixin.test.d.ts +2 -0
- package/dist-types/components/menu/test/MultiLevelListMixin.test.d.ts.map +1 -0
- package/dist-types/components/menu/test/lion-menu-interactions.test.d.ts +2 -0
- package/dist-types/components/menu/test/lion-menu-interactions.test.d.ts.map +1 -0
- package/dist-types/components/menu/test/lion-menu.test.d.ts +2 -0
- package/dist-types/components/menu/test/lion-menu.test.d.ts.map +1 -0
- package/dist-types/components/menu/test-helpers/mimicKeyPress.d.ts +7 -0
- package/dist-types/components/menu/test-helpers/mimicKeyPress.d.ts.map +1 -0
- package/dist-types/components/menu/test-suites/InteractiveListMixin.suite.d.ts +11 -0
- package/dist-types/components/menu/test-suites/InteractiveListMixin.suite.d.ts.map +1 -0
- package/dist-types/components/menu/test-suites/LionMenu.suite.d.ts +9 -0
- package/dist-types/components/menu/test-suites/LionMenu.suite.d.ts.map +1 -0
- package/dist-types/components/menu/test-suites/LionMenuInteractions.suite.d.ts +5 -0
- package/dist-types/components/menu/test-suites/LionMenuInteractions.suite.d.ts.map +1 -0
- package/dist-types/components/menu/test-suites/MoreButtonMenuMixin.suite.d.ts +11 -0
- package/dist-types/components/menu/test-suites/MoreButtonMenuMixin.suite.d.ts.map +1 -0
- package/dist-types/components/menu/test-suites/MultiLevelListMixin.suite.d.ts +11 -0
- package/dist-types/components/menu/test-suites/MultiLevelListMixin.suite.d.ts.map +1 -0
- package/dist-types/components/menu/types/InteractiveListMixinTypes.d.ts +72 -0
- package/dist-types/components/menu/types/InteractiveListMixinTypes.d.ts.map +1 -0
- package/dist-types/components/menu/types/MoreButtonMenuMixinTypes.d.ts +30 -0
- package/dist-types/components/menu/types/MoreButtonMenuMixinTypes.d.ts.map +1 -0
- package/dist-types/components/menu/types/MultiLevelListMixinTypes.d.ts +16 -0
- package/dist-types/components/menu/types/MultiLevelListMixinTypes.d.ts.map +1 -0
- package/dist-types/components/menu/types/OverlayWithListInvokerMixinTypes.d.ts +35 -0
- package/dist-types/components/menu/types/OverlayWithListInvokerMixinTypes.d.ts.map +1 -0
- package/dist-types/components/overlays/src/OverlayController.d.ts +22 -5
- package/dist-types/components/overlays/src/OverlayController.d.ts.map +1 -1
- package/dist-types/components/overlays/src/OverlayMixin.d.ts.map +1 -1
- package/dist-types/components/overlays/src/utils/is-equal-config.d.ts.map +1 -1
- package/dist-types/components/overlays/types/ArrowMixinTypes.d.ts.map +1 -1
- package/dist-types/components/overlays/types/OverlayConfig.d.ts +12 -2
- package/dist-types/components/overlays/types/OverlayConfig.d.ts.map +1 -1
- package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts +1 -0
- package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts.map +1 -1
- package/dist-types/components/select-rich/src/LionSelectRich.d.ts +13 -2
- package/dist-types/components/select-rich/src/LionSelectRich.d.ts.map +1 -1
- package/dist-types/components/select-rich/test/lion-select-rich-interaction.test.d.ts.map +1 -1
- package/dist-types/components/select-rich/test/lion-select-rich-upgrade.test.d.ts +2 -0
- package/dist-types/components/select-rich/test/lion-select-rich-upgrade.test.d.ts.map +1 -0
- package/dist-types/components/tooltip/src/LionTooltip.d.ts +1 -1
- package/dist-types/exports/define/lion-item.d.ts +2 -0
- package/dist-types/exports/define/lion-item.d.ts.map +1 -0
- package/dist-types/exports/define/lion-menu.d.ts +2 -0
- package/dist-types/exports/define/lion-menu.d.ts.map +1 -0
- package/dist-types/exports/define/lion-menuitem.d.ts +2 -0
- package/dist-types/exports/define/lion-menuitem.d.ts.map +1 -0
- package/dist-types/exports/menu-test-suites.d.ts +4 -0
- package/dist-types/exports/menu-test-suites.d.ts.map +1 -0
- package/dist-types/exports/menu.d.ts +3 -0
- package/dist-types/exports/menu.d.ts.map +1 -0
- package/dist-types/exports/overlays.d.ts +6 -0
- package/dist-types/exports/overlays.d.ts.map +1 -1
- package/dist-types/tsconfig.tsbuildinfo +1 -1
- package/docs/components/checkbox-group/overview.md +2 -2
- package/docs/components/collapsible/overview.md +1 -1
- package/docs/components/combobox/api-table.md +53 -39
- package/docs/components/combobox/overview.md +1 -1
- package/docs/components/combobox/use-cases.md +1 -1
- package/docs/components/dialog/api-table.md +32 -6
- package/docs/components/dialog/overview.md +1 -1
- package/docs/components/fieldset/overview.md +5 -5
- package/docs/components/form/overview.md +3 -3
- package/docs/components/form/use-cases.md +2 -2
- package/docs/components/icon/use-cases.md +1 -1
- package/docs/components/input/overview.md +1 -1
- package/docs/components/input-amount/api-table.md +9 -7
- package/docs/components/input-amount/overview.md +3 -3
- package/docs/components/input-amount/use-cases.md +15 -4
- package/docs/components/input-amount-dropdown/api-table.md +2 -0
- package/docs/components/input-date/overview.md +3 -3
- package/docs/components/input-datepicker/api-table.md +63 -45
- package/docs/components/input-datepicker/overview.md +5 -5
- package/docs/components/input-email/overview.md +2 -2
- package/docs/components/input-file/overview.md +1 -1
- package/docs/components/input-iban/overview.md +2 -2
- package/docs/components/input-range/overview.md +2 -2
- package/docs/components/input-stepper/overview.md +1 -1
- package/docs/components/input-tel/overview.md +1 -1
- package/docs/components/input-tel/use-cases.md +6 -6
- package/docs/components/input-tel-dropdown/overview.md +1 -1
- package/docs/components/listbox/use-cases.md +1 -1
- package/docs/components/menu/api-table.md +44 -0
- package/docs/components/menu/applyMenuDemoStyles.js +173 -0
- package/docs/components/menu/extensions.md +262 -0
- package/docs/components/menu/index.md +13 -0
- package/docs/components/menu/migration.md +129 -0
- package/docs/components/menu/overview.md +448 -0
- package/docs/components/menu/src/DemoNavigationBar.js +441 -0
- package/docs/components/menu/src/DemoSpinButton.js +215 -0
- package/docs/components/menu/src/DemoToolbar.js +101 -0
- package/docs/components/menu/src/DemoTree.js +55 -0
- package/docs/components/menu/src/navigation-bar-types.js +41 -0
- package/docs/components/menu/use-cases.md +74 -0
- package/docs/components/radio-group/overview.md +3 -3
- package/docs/components/select/use-cases.md +1 -1
- package/docs/components/select-rich/api-table.md +51 -33
- package/docs/components/select-rich/use-cases.md +2 -2
- package/docs/components/tabs/examples.md +1 -1
- package/docs/components/tooltip/api-table.md +33 -7
- package/docs/fundamentals/index.md +4 -4
- package/docs/fundamentals/node-tools/providence-analytics/overview.md +1 -1
- package/docs/fundamentals/node-tools/publish-docs/overview.md +3 -3
- package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md +2 -2
- package/docs/fundamentals/rationales/accessibility.md +1 -1
- package/docs/fundamentals/systems/core/SlotMixin.md +1 -1
- package/docs/fundamentals/systems/core/overview.md +1 -1
- package/docs/fundamentals/systems/form/formatting-and-parsing.md +4 -4
- package/docs/fundamentals/systems/form/model-value.md +1 -1
- package/docs/fundamentals/systems/form/overview.md +28 -28
- package/docs/fundamentals/systems/form/validate.md +2 -2
- package/docs/fundamentals/systems/localize/overview.md +4 -4
- package/docs/fundamentals/systems/overlays/api-table.md +46 -43
- package/docs/fundamentals/systems/overlays/configuration.md +2 -2
- package/docs/fundamentals/systems/overlays/overview.md +5 -5
- package/docs/fundamentals/systems/overlays/use-cases.md +2 -2
- package/docs/fundamentals/tools/helpers/overview.md +1 -1
- package/docs/fundamentals/tools/singleton-manager/overview.md +4 -4
- package/docs/guides/how-to/create-a-custom-field.md +5 -5
- package/docs/guides/how-to/create-a-form.md +4 -4
- package/docs/guides/how-to/extend-a-native-input.md +2 -2
- package/docs/guides/how-to/index.md +1 -1
- package/docs/guides/index.md +8 -8
- package/docs/guides/principles/index.md +5 -5
- package/docs/guides/principles/styling.md +1 -1
- package/exports/define/lion-item.js +3 -0
- package/exports/define/lion-menu.js +3 -0
- package/exports/define/lion-menuitem.js +3 -0
- package/exports/menu-test-suites.js +4 -0
- package/exports/menu.js +3 -0
- package/exports/overlays.js +6 -0
- package/menu-test-suites.js +4 -0
- package/menu.js +3 -0
- package/overlays.js +6 -0
- package/package.json +11 -4
- package/vendor/README.md +61 -0
- package/vendor/awesome-phonenumber-7.9.0-tlouisse.libphonenumber-9.0.41.tgz +0 -0
- package/vscode.html-custom-data.json +76 -8
- package/web-types.json +202 -17
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/* eslint-disable import/no-extraneous-dependencies */
|
|
2
|
+
/* eslint-disable import/no-relative-packages */
|
|
3
|
+
import { LionMenu } from '@lion/ui/menu.js';
|
|
4
|
+
import {
|
|
5
|
+
setChecked,
|
|
6
|
+
toggleChecked,
|
|
7
|
+
} from '../../../../packages/ui/components/menu/src/utils/listItemInteractions.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @typedef {import('../../../../packages/ui/components/menu/types/InteractiveListMixinTypes.js').InteractiveListItemRole} InteractiveListItemRole
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
// @ts-ignore - class extension properties mismatch at the OverlayWithListInvokerMixin boundary
|
|
14
|
+
export class DemoToolbar extends LionMenu {
|
|
15
|
+
constructor() {
|
|
16
|
+
super();
|
|
17
|
+
|
|
18
|
+
this._listRole = 'toolbar';
|
|
19
|
+
this.bar = true;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Allows groups ([role=radiogroup|checkboxgroup]) within one level.
|
|
24
|
+
* In case we deal with [role=checkbox], we treat it as multiple choice group
|
|
25
|
+
* @override InteractiveListMixin
|
|
26
|
+
* @param {number} index
|
|
27
|
+
*/
|
|
28
|
+
setCheckedIndex(index) {
|
|
29
|
+
const item = this.listItems[index];
|
|
30
|
+
if (item) {
|
|
31
|
+
// @ts-ignore - InteractiveListItemRole type
|
|
32
|
+
const role = /** @type {InteractiveListItemRole} */ (item.getAttribute('role'));
|
|
33
|
+
let listItemsWithinGroup = this.listItems;
|
|
34
|
+
let { multiple } = this;
|
|
35
|
+
if (role === 'radio' || role === 'checkbox') {
|
|
36
|
+
/**
|
|
37
|
+
* If index = 1 (radio 'Red'), closest group will be div[role=radiogroup]
|
|
38
|
+
* @example
|
|
39
|
+
* <demo-toolbar>
|
|
40
|
+
* <div role="radiogroup" aria-label="Text Color">
|
|
41
|
+
* <button role="radio" aria-checked="false">Blue</button>
|
|
42
|
+
* <button role="radio" aria-checked="true">Red</button>
|
|
43
|
+
* <button role="radio" aria-checked="false">Green</button>
|
|
44
|
+
* </div>
|
|
45
|
+
* <div role="separator"></div>
|
|
46
|
+
* <div role="checkboxgroup" aria-label="Text Color">
|
|
47
|
+
* <button role="checkbox" aria-checked="false">Blue</button>
|
|
48
|
+
* <button role="checkbox" aria-checked="true">Red</button>
|
|
49
|
+
* <button role="checkbox" aria-checked="false">Green</button>
|
|
50
|
+
* </div>
|
|
51
|
+
* </demo-toolbar>
|
|
52
|
+
*/
|
|
53
|
+
let closestGroup;
|
|
54
|
+
if (role === 'radio') {
|
|
55
|
+
closestGroup = item.closest('[role="radiogroup"]');
|
|
56
|
+
} else if (role === 'checkbox') {
|
|
57
|
+
closestGroup = item.closest('[role="checkboxgroup"]');
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const group = closestGroup && this.contains(closestGroup) ? closestGroup : this;
|
|
61
|
+
listItemsWithinGroup = this.listItems.filter(listItem => group.contains(listItem));
|
|
62
|
+
multiple = role === 'checkbox';
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (!multiple) {
|
|
66
|
+
// Uncheck all
|
|
67
|
+
listItemsWithinGroup.forEach(listItem => {
|
|
68
|
+
setChecked(listItem, true);
|
|
69
|
+
});
|
|
70
|
+
setChecked(this.listItems[index]);
|
|
71
|
+
} else {
|
|
72
|
+
toggleChecked(this.listItems[index]);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* @param {*} newItems
|
|
79
|
+
*/
|
|
80
|
+
_initListItems(newItems) {
|
|
81
|
+
super._initListItems(newItems);
|
|
82
|
+
|
|
83
|
+
// @ts-ignore - forEach parameter
|
|
84
|
+
newItems.forEach(item => {
|
|
85
|
+
if (
|
|
86
|
+
item.getAttribute('role') === 'button' ||
|
|
87
|
+
(item.tagName === 'BUTTON' && !item.hasAttribute('role'))
|
|
88
|
+
) {
|
|
89
|
+
const initialAriaPressed = item.getAttribute('aria-pressed');
|
|
90
|
+
item.setAttribute('aria-pressed', initialAriaPressed || 'false');
|
|
91
|
+
|
|
92
|
+
item.addEventListener('click', () => {
|
|
93
|
+
const ariaPressed = item.getAttribute('aria-pressed') === 'true';
|
|
94
|
+
item.setAttribute('aria-pressed', `${!ariaPressed}`);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
customElements.define('demo-toolbar', DemoToolbar);
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/* eslint-disable import/no-extraneous-dependencies */
|
|
2
|
+
/* eslint-disable import/no-relative-packages */
|
|
3
|
+
import { LitElement } from 'lit';
|
|
4
|
+
import { MultiLevelListMixin } from '../../../../packages/ui/components/menu/src/MultiLevelListMixin.js';
|
|
5
|
+
|
|
6
|
+
// @ts-ignore - class extension with mixin
|
|
7
|
+
export class DemoTree extends MultiLevelListMixin(LitElement) {
|
|
8
|
+
constructor() {
|
|
9
|
+
super();
|
|
10
|
+
|
|
11
|
+
/** @configure InteractiveListMixin */
|
|
12
|
+
this._listRole = 'tree';
|
|
13
|
+
/** @configure InteractiveListMixin */
|
|
14
|
+
this._activateOnTypedChars = true;
|
|
15
|
+
/** @configure DisclosureMixin */
|
|
16
|
+
this.invokerInteraction = 'click';
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @param {*} changedProperties
|
|
21
|
+
*/
|
|
22
|
+
updated(changedProperties) {
|
|
23
|
+
super.updated(changedProperties);
|
|
24
|
+
|
|
25
|
+
if (changedProperties.has('level')) {
|
|
26
|
+
if (this.level > 1) {
|
|
27
|
+
this._listNode.setAttribute('role', 'group');
|
|
28
|
+
}
|
|
29
|
+
this.__setAriaLevelForListItems();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @param {*} newItems
|
|
35
|
+
*/
|
|
36
|
+
_initListItems(newItems) {
|
|
37
|
+
// @ts-ignore - parameter types
|
|
38
|
+
super._initListItems(newItems);
|
|
39
|
+
|
|
40
|
+
this.__setAriaLevelForListItems();
|
|
41
|
+
// @ts-ignore - forEach parameters
|
|
42
|
+
newItems.forEach((item, index) => {
|
|
43
|
+
item.setAttribute('aria-posinset', `${index + 1}`);
|
|
44
|
+
item.setAttribute('aria-setsize', `${this.listItems.length}`);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
__setAriaLevelForListItems() {
|
|
49
|
+
this.listItems.forEach(item => {
|
|
50
|
+
item.setAttribute?.('aria-level', `${this.level + 1}`);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
customElements.define('demo-tree', DemoTree);
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {'mobile' | 'desktop'} NavBarResponsiveMode
|
|
3
|
+
* Responsive mode for the navigation bar
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @typedef {Object} MenuItem
|
|
8
|
+
* Navigation menu item
|
|
9
|
+
* @property {string} [id] - Optional unique identifier
|
|
10
|
+
* @property {string} title - Display title of the menu item
|
|
11
|
+
* @property {string} [link] - URL for the menu item (for leaf items)
|
|
12
|
+
* @property {MenuItem[]} [sub] - Submenu items (for parent items)
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @typedef {Object} CtaLink
|
|
17
|
+
* Call-to-action link
|
|
18
|
+
* @property {string} [id] - Optional unique identifier
|
|
19
|
+
* @property {string} [href] - URL for the CTA
|
|
20
|
+
* @property {string} [text] - Display text for the CTA
|
|
21
|
+
* @property {string} [label] - Accessible label for the CTA
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @typedef {Object} Logo
|
|
26
|
+
* Logo configuration for the navigation bar
|
|
27
|
+
* @property {string} type - Logo type (e.g., 'ing')
|
|
28
|
+
* @property {string} alt - Alternative text for the logo
|
|
29
|
+
* @property {string} href - URL the logo links to
|
|
30
|
+
* @property {string} [src] - Optional custom logo source URL
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @typedef {Object} LevelConfig
|
|
35
|
+
* Configuration for a menu level
|
|
36
|
+
* @property {boolean} [isBar] - Whether this level is displayed as a bar
|
|
37
|
+
* @property {boolean} [hasFullWidthFlyout] - Whether this level has a full-width flyout
|
|
38
|
+
* @property {object} [openableConfig] - Configuration for the openable overlay
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
export {};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 'Menu: Overview'
|
|
3
|
+
parts:
|
|
4
|
+
- Menu
|
|
5
|
+
- Use Cases
|
|
6
|
+
eleventyNavigation:
|
|
7
|
+
key: 'Menu: Use Cases'
|
|
8
|
+
order: 20
|
|
9
|
+
parent: Menu
|
|
10
|
+
title: Use Cases
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Use Cases
|
|
14
|
+
|
|
15
|
+
```js script
|
|
16
|
+
import { html } from 'lit';
|
|
17
|
+
import '@lion/ui/define/lion-item.js';
|
|
18
|
+
import '@lion/ui/define/lion-menu.js';
|
|
19
|
+
import { applyMenuDemoStyles } from './applyMenuDemoStyles.js';
|
|
20
|
+
|
|
21
|
+
applyMenuDemoStyles();
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Default
|
|
25
|
+
|
|
26
|
+
```html preview-story
|
|
27
|
+
<nav>
|
|
28
|
+
<button data-invoker>Open menu</button>
|
|
29
|
+
<lion-menu>
|
|
30
|
+
<div role="menuitem">Go to Definition</div>
|
|
31
|
+
<div role="menuitem">Go to Type Definition</div>
|
|
32
|
+
<div>
|
|
33
|
+
<button role="menuitem" data-invoker>Peek</button>
|
|
34
|
+
<lion-menu>
|
|
35
|
+
<div role="menuitem">Peek Call Hierarchy</div>
|
|
36
|
+
<div role="separator"></div>
|
|
37
|
+
<div role="menuitem">Peek Definition</div>
|
|
38
|
+
</lion-menu>
|
|
39
|
+
</div>
|
|
40
|
+
<div role="separator"></div>
|
|
41
|
+
<div role="menuitem">Find all References</div>
|
|
42
|
+
</lion-menu>
|
|
43
|
+
</nav>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Overflow
|
|
47
|
+
|
|
48
|
+
## Attributes & Properties
|
|
49
|
+
|
|
50
|
+
### Bar
|
|
51
|
+
|
|
52
|
+
By adding the `bar` attribute the axis will be set to `inline` and the role will be set to menubar.
|
|
53
|
+
|
|
54
|
+
```html preview-story
|
|
55
|
+
<nav>
|
|
56
|
+
<lion-menu bar>
|
|
57
|
+
<div>
|
|
58
|
+
<a role="menuitem" data-invoker href="#home">home</a>
|
|
59
|
+
</div>
|
|
60
|
+
<div role="menuitem">Go to Definition</div>
|
|
61
|
+
<div role="menuitem">Go to Type Definition</div>
|
|
62
|
+
<div>
|
|
63
|
+
<button role="menuitem" data-invoker>Details</button>
|
|
64
|
+
<lion-menu>
|
|
65
|
+
<div role="menuitem">Peek Call Hierarchy</div>
|
|
66
|
+
<div role="separator"></div>
|
|
67
|
+
<div role="menuitem">Peek Definition</div>
|
|
68
|
+
</lion-menu>
|
|
69
|
+
</div>
|
|
70
|
+
<div role="separator"></div>
|
|
71
|
+
<div role="menuitem">Find all References</div>
|
|
72
|
+
</lion-menu>
|
|
73
|
+
</nav>
|
|
74
|
+
```
|
|
@@ -32,12 +32,12 @@ export const main = () => html`
|
|
|
32
32
|
`;
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
- Make sure that to use a name attribute as it is necessary for our [form](https://github.com/ing-bank/lion/blob/
|
|
36
|
-
- If you have many options for a user to pick from, consider using our [select](https://github.com/ing-bank/lion/blob/
|
|
35
|
+
- Make sure that to use a name attribute as it is necessary for our [form](https://github.com/ing-bank/lion/blob/4649554021224763994601dd8d202c511d35013e/docs/components/form/overview.md)'s serialization result.
|
|
36
|
+
- If you have many options for a user to pick from, consider using our [select](https://github.com/ing-bank/lion/blob/4649554021224763994601dd8d202c511d35013e/docs/components/select/overview.md) instead.
|
|
37
37
|
|
|
38
38
|
## Features
|
|
39
39
|
|
|
40
|
-
Since it extends from our [fieldset](https://github.com/ing-bank/lion/blob/
|
|
40
|
+
Since it extends from our [fieldset](https://github.com/ing-bank/lion/blob/4649554021224763994601dd8d202c511d35013e/docs/components/fieldset/overview.md), it has all the features a fieldset has.
|
|
41
41
|
|
|
42
42
|
- Get or set the checked value of the group:
|
|
43
43
|
- modelValue (default) - `checkedValue()`
|
|
@@ -65,7 +65,7 @@ Or by setting the `disabled` attribute on the entire `lion-select` field.
|
|
|
65
65
|
|
|
66
66
|
## Validation
|
|
67
67
|
|
|
68
|
-
A validator can be used to make it e.g. `required`. If you want to know how to do that, please take a look at our [validation examples](https://github.com/ing-bank/lion/blob/
|
|
68
|
+
A validator can be used to make it e.g. `required`. If you want to know how to do that, please take a look at our [validation examples](https://github.com/ing-bank/lion/blob/4649554021224763994601dd8d202c511d35013e/docs/fundamentals/systems/form/validate.md).
|
|
69
69
|
|
|
70
70
|
## Rendering and updating select options
|
|
71
71
|
|
|
@@ -54,45 +54,62 @@ eleventyNavigation:
|
|
|
54
54
|
|
|
55
55
|
### Fields
|
|
56
56
|
|
|
57
|
-
| Name
|
|
58
|
-
|
|
|
59
|
-
| `
|
|
60
|
-
| `
|
|
61
|
-
| `
|
|
62
|
-
| `
|
|
63
|
-
| `
|
|
64
|
-
| `
|
|
65
|
-
| `
|
|
66
|
-
| `
|
|
67
|
-
| `
|
|
68
|
-
| `
|
|
69
|
-
| `
|
|
57
|
+
| Name | Privacy | Type | Default | Description | Inherited From |
|
|
58
|
+
| ---------------------------- | --------- | -------------------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- |
|
|
59
|
+
| `config` | public | `Partial<OverlayConfig>` | `{}` | Configure the many options of the \`OverlayController\` | OverlayMixin |
|
|
60
|
+
| `interactionMode` | public | `'windows/linux'\|'mac'\|'auto'` | `'auto'` | Aligns behavior for 'selectionFollowFocus' and 'navigateWithinInvoker' with
platform. When 'auto' (default), platform is automatically detected | |
|
|
61
|
+
| `navigateWithinInvoker` | public | `Boolean` | `false` | When invoker has focus, up and down arrow keys changes active state of listbox,
without opening overlay. | |
|
|
62
|
+
| `opened` | public | `boolean` | `false` | If you add the opened attribute a dialog will be opened on page load. The invoker can be left out
in case the user does not need to be able to reopen the dialog. | OverlayMixin |
|
|
63
|
+
| `singleOption` | public | `boolean` | `false` | | |
|
|
64
|
+
| `slots` | public | `SlotsMap` | | | |
|
|
65
|
+
| `_arrowWidth` | protected | `number` | `28` | | |
|
|
66
|
+
| `_feedbackConditionMeta` | protected | | | | LionListbox |
|
|
67
|
+
| `_focusableNode` | protected | | | | LionListbox |
|
|
68
|
+
| `_invokerNode` | protected | `LionSelectInvoker` | | | |
|
|
69
|
+
| `_overlayBackdropNode` | protected | | | | OverlayMixin |
|
|
70
|
+
| `_overlayContentNode` | protected | | | | OverlayMixin |
|
|
71
|
+
| `_overlayContentWrapperNode` | protected | | | | OverlayMixin |
|
|
72
|
+
| `_overlayInvokerNode` | protected | | | The node that opens/closes this overlay.

Resolved in a stable, declarative way (independent of the exact DOM order)
by looking, in order, for:
1\. a child with \`\[slot="invoker"]\`
2\. any element in the same root that opts in via \`\[data-invoker]\` and
 references this host by id (\`for="\<id>"\`)
3\. a preceding sibling that opts in via \`\[data-invoker]\` | OverlayMixin |
|
|
73
|
+
| `_overlayReferenceNode` | protected | | | | OverlayMixin |
|
|
74
|
+
| `_scrollTargetNode` | protected | | | | |
|
|
70
75
|
|
|
71
76
|
### Methods
|
|
72
77
|
|
|
73
|
-
| Name
|
|
74
|
-
|
|
|
75
|
-
| `addFormElement`
|
|
76
|
-
| `
|
|
77
|
-
| `
|
|
78
|
-
| `
|
|
79
|
-
| `
|
|
80
|
-
| `
|
|
81
|
-
| `
|
|
82
|
-
| `
|
|
83
|
-
| `
|
|
84
|
-
| `
|
|
85
|
-
| `
|
|
86
|
-
| `
|
|
87
|
-
| `
|
|
88
|
-
| `
|
|
89
|
-
| `
|
|
78
|
+
| Name | Privacy | Description | Parameters | Return | Inherited From |
|
|
79
|
+
| ---------------------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ------------------- | -------------- |
|
|
80
|
+
| `addFormElement` | public | | `child: LionOption & FormControlHost, indexToInsertAt: Number` | | |
|
|
81
|
+
| `close` | public | Hides the overlay | | | OverlayMixin |
|
|
82
|
+
| `open` | public | Shows the overlay | | | OverlayMixin |
|
|
83
|
+
| `removeFormElement` | public | | `child: FormRegisteringHost` | | |
|
|
84
|
+
| `repositionOverlay` | public | Sometimes it's needed to recompute Popper position of an overlay, for instance when we have
an opened combobox and the surrounding context changes (the space consumed by the textbox
increases vertically) | | | OverlayMixin |
|
|
85
|
+
| `toggle` | public | Toggles the overlay | | | OverlayMixin |
|
|
86
|
+
| `_alignInvokerWidth` | protected | Align invoker width with content width
Make sure display is not set to "none" while calculating the content width | | | |
|
|
87
|
+
| `_defineOverlay` | protected | | `{ contentNode, invokerNode, referenceNode, backdropNode, contentWrapperNode }, config: DefineOverlayConfig` | `OverlayController` | OverlayMixin |
|
|
88
|
+
| `_defineOverlayConfig` | protected | | | `OverlayConfig` | OverlayMixin |
|
|
89
|
+
| `_getCheckedElements` | protected | In the select disabled options are still going to a possible value for example
when prefilling or programmatically setting it. | | | |
|
|
90
|
+
| `_getInvokerNode` | protected | | | `Element\|null` | OverlayMixin |
|
|
91
|
+
| `_inputGroupInputTemplate` | protected | | | | |
|
|
92
|
+
| `_isPermanentlyDisconnected` | protected | When we're moving around in dom, disconnectedCallback gets called.
Before we decide to teardown, let's wait to see if we were not just moving nodes around. | | `Promise<boolean>` | OverlayMixin |
|
|
93
|
+
| `_listboxOnClick` | protected | | | | |
|
|
94
|
+
| `_listboxOnKeyDown` | protected | | `ev: KeyboardEvent` | | |
|
|
95
|
+
| `_noDefaultSelectedInheritsWidth` | protected | With no selected element, we should override the inheritsReferenceWidth in most cases.
By default, we will set it to 'min', and then set it back to what it was initially when
something is selected.
As a subclasser you can override this behavior. | | | |
|
|
96
|
+
| `_onFormElementsChanged` | protected | | | | |
|
|
97
|
+
| `_onLabelClick` | protected | | | | |
|
|
98
|
+
| `_scrollIntoView` | protected | | `el: HTMLElement, scrollTargetEl: HTMLElement` | | |
|
|
99
|
+
| `_setOpenedWithoutPropertyEffects` | protected | When the opened state is changed by an Application Developer,cthe OverlayController is
requested to show/hide. It might happen that this request is not honoured
(intercepted in before-hide for instance), so that we need to sync the controller state
to this webcomponent again, preventing eternal loops. | `newOpened: boolean` | | OverlayMixin |
|
|
100
|
+
| `_setupListboxNode` | protected | | | | |
|
|
101
|
+
| `_setupOpenCloseListeners` | protected | | | | OverlayMixin |
|
|
102
|
+
| `_setupOverlayCtrl` | protected | | | | OverlayMixin |
|
|
103
|
+
| `_teardownListboxNode` | protected | | | | |
|
|
104
|
+
| `_teardownOpenCloseListeners` | protected | | | | OverlayMixin |
|
|
105
|
+
| `_teardownOverlayCtrl` | protected | | | | OverlayMixin |
|
|
90
106
|
|
|
91
107
|
### Events
|
|
92
108
|
|
|
93
|
-
| Name
|
|
94
|
-
|
|
|
95
|
-
| `blur`
|
|
109
|
+
| Name | Type | Description | Inherited From |
|
|
110
|
+
| ---------------- | ------------- | ----------- | -------------- |
|
|
111
|
+
| `blur` | `Event` | | |
|
|
112
|
+
| `opened-changed` | `CustomEvent` | | OverlayMixin |
|
|
96
113
|
|
|
97
114
|
### Attributes
|
|
98
115
|
|
|
@@ -101,5 +118,6 @@ eleventyNavigation:
|
|
|
101
118
|
| `navigate-within-invoker` | navigateWithinInvoker | |
|
|
102
119
|
| `interaction-mode` | interactionMode | |
|
|
103
120
|
| `single-option` | singleOption | |
|
|
121
|
+
| `opened` | opened | OverlayMixin |
|
|
104
122
|
|
|
105
123
|
<hr/>
|
|
@@ -29,7 +29,7 @@ You can set the full `modelValue` for each option, which includes the checked pr
|
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
Note, when rendering with the help of the `cache` function imported from `lit/directives/cache.js`, setting model by
|
|
32
|
-
the `modelValue` property is not fully supported. Consider setting the model by the `choiceValue` property instead. See [Setting model by `choiceValue` property](https://github.com/ing-bank/lion/blob/
|
|
32
|
+
the `modelValue` property is not fully supported. Consider setting the model by the `choiceValue` property instead. See [Setting model by `choiceValue` property](https://github.com/ing-bank/lion/blob/4649554021224763994601dd8d202c511d35013e/docs/components/select-rich/#setting-model-by-the-choicevalue-property) for more details.
|
|
33
33
|
|
|
34
34
|
### Setting model by the `choiceValue` property
|
|
35
35
|
|
|
@@ -328,7 +328,7 @@ LionSelectRich will give it acces to:
|
|
|
328
328
|
- LionSelectRich itself, via `.hostElement`
|
|
329
329
|
|
|
330
330
|
Code of an advanced custom invoker is shown below (this is the code for the
|
|
331
|
-
invoker used in [IntlSelectRich](https://github.com/ing-bank/lion/blob/
|
|
331
|
+
invoker used in [IntlSelectRich](https://github.com/ing-bank/lion/blob/4649554021224763994601dd8d202c511d35013e/docs/components/select-rich/examples.md)).
|
|
332
332
|
The invoker is usually added in the invoker slot of the LionSelectRich subclass.
|
|
333
333
|
However, it would also be possible for an application developer to provide the invoker
|
|
334
334
|
by putting it in light dom:
|
|
@@ -21,7 +21,7 @@ import './src/lea-tab-panel.js';
|
|
|
21
21
|
|
|
22
22
|
## Lea Tabs
|
|
23
23
|
|
|
24
|
-
Learn how to create the `lea tabs` in our ["introducing lion" blogpost](https://github.com/ing-bank/lion/blob/
|
|
24
|
+
Learn how to create the `lea tabs` in our ["introducing lion" blogpost](https://github.com/ing-bank/lion/blob/4649554021224763994601dd8d202c511d35013e/docs/blog/ing-open-sources-lion.md).
|
|
25
25
|
|
|
26
26
|
```js preview-story
|
|
27
27
|
export const main = () => html`
|
|
@@ -16,21 +16,47 @@ eleventyNavigation:
|
|
|
16
16
|
|
|
17
17
|
### Fields
|
|
18
18
|
|
|
19
|
-
| Name
|
|
20
|
-
|
|
|
21
|
-
| `
|
|
22
|
-
| `
|
|
19
|
+
| Name | Privacy | Type | Default | Description | Inherited From |
|
|
20
|
+
| ---------------------------- | --------- | ------------------------ | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- |
|
|
21
|
+
| `config` | public | `Partial<OverlayConfig>` | `{}` | Configure the many options of the \`OverlayController\` | OverlayMixin |
|
|
22
|
+
| `hasArrow` | public | `boolean` | `false` | Whether an arrow should be displayed | |
|
|
23
|
+
| `invokerRelation` | public | `'label'\|'description'` | `'description'` | Decides whether the tooltip invoker text should be considered a description
(sets aria-describedby) or a label (sets aria-labelledby). | |
|
|
24
|
+
| `opened` | public | `boolean` | `false` | If you add the opened attribute a dialog will be opened on page load. The invoker can be left out
in case the user does not need to be able to reopen the dialog. | OverlayMixin |
|
|
25
|
+
| `_overlayBackdropNode` | protected | | | | OverlayMixin |
|
|
26
|
+
| `_overlayContentNode` | protected | | | | OverlayMixin |
|
|
27
|
+
| `_overlayContentWrapperNode` | protected | | | | OverlayMixin |
|
|
28
|
+
| `_overlayInvokerNode` | protected | | | The node that opens/closes this overlay.

Resolved in a stable, declarative way (independent of the exact DOM order)
by looking, in order, for:
1\. a child with \`\[slot="invoker"]\`
2\. any element in the same root that opts in via \`\[data-invoker]\` and
 references this host by id (\`for="\<id>"\`)
3\. a preceding sibling that opts in via \`\[data-invoker]\` | OverlayMixin |
|
|
29
|
+
| `_overlayReferenceNode` | protected | | | | OverlayMixin |
|
|
23
30
|
|
|
24
31
|
### Methods
|
|
25
32
|
|
|
26
|
-
| Name
|
|
27
|
-
|
|
|
28
|
-
| `
|
|
33
|
+
| Name | Privacy | Description | Parameters | Return | Inherited From |
|
|
34
|
+
| ---------------------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ------------------- | -------------- |
|
|
35
|
+
| `close` | public | Hides the overlay | | | OverlayMixin |
|
|
36
|
+
| `open` | public | Shows the overlay | | | OverlayMixin |
|
|
37
|
+
| `repositionOverlay` | public | Sometimes it's needed to recompute Popper position of an overlay, for instance when we have
an opened combobox and the surrounding context changes (the space consumed by the textbox
increases vertically) | | | OverlayMixin |
|
|
38
|
+
| `toggle` | public | Toggles the overlay | | | OverlayMixin |
|
|
39
|
+
| `_defineOverlay` | protected | | `{ contentNode, invokerNode, referenceNode, backdropNode, contentWrapperNode }, config: DefineOverlayConfig` | `OverlayController` | OverlayMixin |
|
|
40
|
+
| `_defineOverlayConfig` | protected | | | `OverlayConfig` | OverlayMixin |
|
|
41
|
+
| `_getInvokerNode` | protected | | | `Element\|null` | OverlayMixin |
|
|
42
|
+
| `_isPermanentlyDisconnected` | protected | When we're moving around in dom, disconnectedCallback gets called.
Before we decide to teardown, let's wait to see if we were not just moving nodes around. | | `Promise<boolean>` | OverlayMixin |
|
|
43
|
+
| `_setOpenedWithoutPropertyEffects` | protected | When the opened state is changed by an Application Developer,cthe OverlayController is
requested to show/hide. It might happen that this request is not honoured
(intercepted in before-hide for instance), so that we need to sync the controller state
to this webcomponent again, preventing eternal loops. | `newOpened: boolean` | | OverlayMixin |
|
|
44
|
+
| `_setupOpenCloseListeners` | protected | | | | OverlayMixin |
|
|
45
|
+
| `_setupOverlayCtrl` | protected | | | | OverlayMixin |
|
|
46
|
+
| `_teardownOpenCloseListeners` | protected | | | | OverlayMixin |
|
|
47
|
+
| `_teardownOverlayCtrl` | protected | | | | OverlayMixin |
|
|
48
|
+
|
|
49
|
+
### Events
|
|
50
|
+
|
|
51
|
+
| Name | Type | Description | Inherited From |
|
|
52
|
+
| ---------------- | ------------- | ----------- | -------------- |
|
|
53
|
+
| `opened-changed` | `CustomEvent` | | OverlayMixin |
|
|
29
54
|
|
|
30
55
|
### Attributes
|
|
31
56
|
|
|
32
57
|
| Name | Field | Inherited From |
|
|
33
58
|
| ------------------ | --------------- | -------------- |
|
|
34
59
|
| `invoker-relation` | invokerRelation | |
|
|
60
|
+
| `opened` | opened | OverlayMixin |
|
|
35
61
|
|
|
36
62
|
<hr/>
|
|
@@ -9,11 +9,11 @@ Here you find more details about what we offer.
|
|
|
9
9
|
|
|
10
10
|
Let's see what each section describes.
|
|
11
11
|
|
|
12
|
-
1. [Systems](https://github.com/ing-bank/lion/blob/
|
|
12
|
+
1. [Systems](https://github.com/ing-bank/lion/blob/4649554021224763994601dd8d202c511d35013e/docs/fundamentals/systems/core/overview.md) <br>
|
|
13
13
|
These are the fundamental systems that power all of our components.
|
|
14
|
-
2. [Tools](https://github.com/ing-bank/lion/blob/
|
|
14
|
+
2. [Tools](https://github.com/ing-bank/lion/blob/4649554021224763994601dd8d202c511d35013e/docs/fundamentals/tools/helpers/overview.md) <br>
|
|
15
15
|
Frontend Tools useful for web development but are not visual and therefore are not components.
|
|
16
|
-
3. [Node Tools](https://github.com/ing-bank/lion/blob/
|
|
16
|
+
3. [Node Tools](https://github.com/ing-bank/lion/blob/4649554021224763994601dd8d202c511d35013e/docs/fundamentals/node-tools/babel-plugin-extend-docs/overview.md) <br>
|
|
17
17
|
Node tools to analyse the code and for extending the documentation.
|
|
18
|
-
4. [Rationales](https://github.com/ing-bank/lion/blob/
|
|
18
|
+
4. [Rationales](https://github.com/ing-bank/lion/blob/4649554021224763994601dd8d202c511d35013e/docs/fundamentals/rationales/side-effects.md) <br>
|
|
19
19
|
The reasoning behind some of our decisions.
|
|
@@ -94,7 +94,7 @@ npx providence-analytics analyze match-imports -t /importing/project -r /exporti
|
|
|
94
94
|
## Utils
|
|
95
95
|
|
|
96
96
|
Providence comes with many tools for deep traversal of identifiers,
|
|
97
|
-
the (babel like) traversal of ast trees in oxc and
|
|
97
|
+
the (babel like) traversal of ast trees in oxc and more.
|
|
98
98
|
Also more generic utils for caching and performant globbing come delivered with Providence.
|
|
99
99
|
|
|
100
100
|
For a better understanding, check out the utils folders (tests and code).
|