@ni/ok-components 1.2.1 → 1.3.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.
Files changed (98) hide show
  1. package/dist/all-components-bundle.js +3058 -531
  2. package/dist/all-components-bundle.js.map +1 -1
  3. package/dist/all-components-bundle.min.js +6791 -5231
  4. package/dist/all-components-bundle.min.js.map +1 -1
  5. package/dist/custom-elements.json +1421 -61
  6. package/dist/custom-elements.md +246 -13
  7. package/dist/esm/fv/accordion-item/index.d.ts +1 -0
  8. package/dist/esm/fv/accordion-item/index.js +1 -0
  9. package/dist/esm/fv/accordion-item/index.js.map +1 -1
  10. package/dist/esm/fv/accordion-item/testing/fv-accordion-item.pageobject.js +5 -0
  11. package/dist/esm/fv/accordion-item/testing/fv-accordion-item.pageobject.js.map +1 -1
  12. package/dist/esm/fv/all-fv.d.ts +7 -0
  13. package/dist/esm/fv/all-fv.js +7 -0
  14. package/dist/esm/fv/all-fv.js.map +1 -1
  15. package/dist/esm/fv/card/index.d.ts +59 -0
  16. package/dist/esm/fv/card/index.js +144 -0
  17. package/dist/esm/fv/card/index.js.map +1 -0
  18. package/dist/esm/fv/card/styles.d.ts +1 -0
  19. package/dist/esm/fv/card/styles.js +231 -0
  20. package/dist/esm/fv/card/styles.js.map +1 -0
  21. package/dist/esm/fv/card/template.d.ts +2 -0
  22. package/dist/esm/fv/card/template.js +126 -0
  23. package/dist/esm/fv/card/template.js.map +1 -0
  24. package/dist/esm/fv/card/types.d.ts +10 -0
  25. package/dist/esm/fv/card/types.js +9 -0
  26. package/dist/esm/fv/card/types.js.map +1 -0
  27. package/dist/esm/fv/chip-selector/index.d.ts +104 -0
  28. package/dist/esm/fv/chip-selector/index.js +367 -0
  29. package/dist/esm/fv/chip-selector/index.js.map +1 -0
  30. package/dist/esm/fv/chip-selector/styles.d.ts +1 -0
  31. package/dist/esm/fv/chip-selector/styles.js +251 -0
  32. package/dist/esm/fv/chip-selector/styles.js.map +1 -0
  33. package/dist/esm/fv/chip-selector/template.d.ts +2 -0
  34. package/dist/esm/fv/chip-selector/template.js +147 -0
  35. package/dist/esm/fv/chip-selector/template.js.map +1 -0
  36. package/dist/esm/fv/context-help/index.d.ts +22 -0
  37. package/dist/esm/fv/context-help/index.js +41 -0
  38. package/dist/esm/fv/context-help/index.js.map +1 -0
  39. package/dist/esm/fv/context-help/styles.d.ts +1 -0
  40. package/dist/esm/fv/context-help/styles.js +55 -0
  41. package/dist/esm/fv/context-help/styles.js.map +1 -0
  42. package/dist/esm/fv/context-help/template.d.ts +2 -0
  43. package/dist/esm/fv/context-help/template.js +24 -0
  44. package/dist/esm/fv/context-help/template.js.map +1 -0
  45. package/dist/esm/fv/context-help/types.d.ts +1 -0
  46. package/dist/esm/fv/context-help/types.js +2 -0
  47. package/dist/esm/fv/context-help/types.js.map +1 -0
  48. package/dist/esm/fv/search-input/index.d.ts +2 -0
  49. package/dist/esm/fv/search-input/index.js +2 -0
  50. package/dist/esm/fv/search-input/index.js.map +1 -1
  51. package/dist/esm/fv/search-input/styles.js +14 -14
  52. package/dist/esm/fv/search-input/styles.js.map +1 -1
  53. package/dist/esm/fv/split-button/index.d.ts +43 -0
  54. package/dist/esm/fv/split-button/index.js +130 -0
  55. package/dist/esm/fv/split-button/index.js.map +1 -0
  56. package/dist/esm/fv/split-button/styles.d.ts +1 -0
  57. package/dist/esm/fv/split-button/styles.js +220 -0
  58. package/dist/esm/fv/split-button/styles.js.map +1 -0
  59. package/dist/esm/fv/split-button/template.d.ts +2 -0
  60. package/dist/esm/fv/split-button/template.js +52 -0
  61. package/dist/esm/fv/split-button/template.js.map +1 -0
  62. package/dist/esm/fv/split-button/types.d.ts +12 -0
  63. package/dist/esm/fv/split-button/types.js +11 -0
  64. package/dist/esm/fv/split-button/types.js.map +1 -0
  65. package/dist/esm/fv/split-button-anchor/index.d.ts +47 -0
  66. package/dist/esm/fv/split-button-anchor/index.js +146 -0
  67. package/dist/esm/fv/split-button-anchor/index.js.map +1 -0
  68. package/dist/esm/fv/split-button-anchor/styles.d.ts +1 -0
  69. package/dist/esm/fv/split-button-anchor/styles.js +228 -0
  70. package/dist/esm/fv/split-button-anchor/styles.js.map +1 -0
  71. package/dist/esm/fv/split-button-anchor/template.d.ts +2 -0
  72. package/dist/esm/fv/split-button-anchor/template.js +64 -0
  73. package/dist/esm/fv/split-button-anchor/template.js.map +1 -0
  74. package/dist/esm/fv/split-button-anchor/types.d.ts +12 -0
  75. package/dist/esm/fv/split-button-anchor/types.js +11 -0
  76. package/dist/esm/fv/split-button-anchor/types.js.map +1 -0
  77. package/dist/esm/fv/summary-panel/index.d.ts +26 -0
  78. package/dist/esm/fv/summary-panel/index.js +70 -0
  79. package/dist/esm/fv/summary-panel/index.js.map +1 -0
  80. package/dist/esm/fv/summary-panel/styles.d.ts +1 -0
  81. package/dist/esm/fv/summary-panel/styles.js +49 -0
  82. package/dist/esm/fv/summary-panel/styles.js.map +1 -0
  83. package/dist/esm/fv/summary-panel/template.d.ts +2 -0
  84. package/dist/esm/fv/summary-panel/template.js +29 -0
  85. package/dist/esm/fv/summary-panel/template.js.map +1 -0
  86. package/dist/esm/fv/summary-panel-tile/index.d.ts +23 -0
  87. package/dist/esm/fv/summary-panel-tile/index.js +59 -0
  88. package/dist/esm/fv/summary-panel-tile/index.js.map +1 -0
  89. package/dist/esm/fv/summary-panel-tile/styles.d.ts +1 -0
  90. package/dist/esm/fv/summary-panel-tile/styles.js +138 -0
  91. package/dist/esm/fv/summary-panel-tile/styles.js.map +1 -0
  92. package/dist/esm/fv/summary-panel-tile/template.d.ts +2 -0
  93. package/dist/esm/fv/summary-panel-tile/template.js +14 -0
  94. package/dist/esm/fv/summary-panel-tile/template.js.map +1 -0
  95. package/dist/esm/fv/summary-panel-tile/types.d.ts +5 -0
  96. package/dist/esm/fv/summary-panel-tile/types.js +5 -0
  97. package/dist/esm/fv/summary-panel-tile/types.js.map +1 -0
  98. package/package.json +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../src/fv/chip-selector/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EACH,0BAA0B,EAC1B,qBAAqB,EACrB,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,6BAA6B,EAC7B,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,SAAS,EACT,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,eAAe,EAClB,MAAM,6DAA6D,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;UAIf,OAAO,CAAC,cAAc,CAAC;;;;;;oBAMb,QAAQ;qBACP,aAAa;;;;;;;;;;gCAUF,YAAY;qBACvB,qBAAqB;oBACtB,gBAAgB;;;;;;;0BAOV,aAAa;sBACjB,WAAW,eAAe,qBAAqB;;;+BAGtC,UAAU;;;;;;;;;;;2CAWE,UAAU;;;;;;;;;;;;mCAYlB,UAAU;;;;;;;;;mBAS1B,YAAY;;uBAER,YAAY,IAAI,eAAe,IAAI,YAAY,IAAI,YAAY;;;;;;;2BAO3D,YAAY;;;+BAGR,qBAAqB;;;;;cAKtC,aAAa,CAAC,iBAAiB;;qCAER,YAAY;;;;;;;;;;;;;;;;;;qBAkB5B,oBAAoB;;;;cAI3B,aAAa,CAAC,iBAAiB;;4BAEjB,YAAY;6BACX,YAAY;;;;cAI3B,SAAS,CAAC,iBAAiB;;;;;;kCAMP,YAAY;;;;;sBAKxB,WAAW,UAAU,gBAAgB;0BACjC,0BAA0B;0BAC1B,mBAAmB;;;;;;;;;;;;;;;0BAenB,aAAa;yBACd,eAAe;;;;;;;;;;;;;0BAad,WAAW,eAAe,qBAAqB;;;;uBAIlD,YAAY,IAAI,eAAe;qBACjC,oBAAoB;;;;;;0BAMf,gBAAgB;;;;;0BAKhB,cAAc;;;;;;0BAMd,gBAAgB;;;;;;;;;;;;uBAYnB,WAAW,UAAU,gBAAgB;;;;;;;0BAOlC,gBAAgB;;;;;;;;;;;;0BAYhB,iBAAiB;;;;0BAIjB,sBAAsB;;;;0BAItB,iBAAiB;;;;;;qBAMtB,qBAAqB;;;;qBAIrB,6BAA6B;;;;iCAIjB,qBAAqB;+BACvB,qBAAqB;;;;;;;;;;;;;;CAcnD,CAAC","sourcesContent":["import { css } from '@ni/fast-element';\nimport {\n applicationBackgroundColor,\n bodyDisabledFontColor,\n bodyFont,\n bodyFontColor,\n borderHoverColor,\n borderRgbPartialColor,\n borderWidth,\n controlHeight,\n controlLabelDisabledFontColor,\n controlLabelFont,\n controlLabelFontColor,\n elevation2BoxShadow,\n fillHoverColor,\n fillHoverSelectedColor,\n fillSelectedColor,\n iconColor,\n placeholderFontColor,\n popupBorderColor,\n smallDelay,\n smallPadding,\n standardPadding\n} from '@ni/nimble-components/dist/esm/theme-provider/design-tokens';\nimport { display } from '../../utilities/style/display';\n\nexport const styles = css`\n @layer base, hover, focusVisible, active, disabled, top;\n\n @layer base {\n ${display('inline-block')}\n\n :host {\n width: 300px;\n max-width: 100%;\n box-sizing: border-box;\n font: ${bodyFont};\n color: ${bodyFontColor};\n }\n\n .chip-selector {\n position: relative;\n width: 100%;\n }\n\n .label {\n display: flex;\n margin-block-end: ${smallPadding};\n color: ${controlLabelFontColor};\n font: ${controlLabelFont};\n }\n\n .chip-selector-field {\n position: relative;\n display: flex;\n align-items: stretch;\n min-height: ${controlHeight};\n border: ${borderWidth} solid rgba(${borderRgbPartialColor}, 0.3);\n background: transparent;\n transition:\n border-color ${smallDelay} ease-in-out;\n }\n\n .chip-selector-field::before {\n content: '';\n position: absolute;\n inset-inline: 0;\n inset-block-end: -1px;\n height: 1px;\n background: transparent;\n pointer-events: none;\n transition: background-color ${smallDelay} ease-in-out;\n }\n\n .chip-selector-field::after {\n content: '';\n position: absolute;\n inset-inline: 0;\n inset-block-end: -1px;\n height: 2px;\n background: transparent;\n pointer-events: none;\n transition:\n background-color ${smallDelay} ease-in-out;\n }\n\n .chip-selector-selection-area {\n position: relative;\n display: flex;\n flex: 1 1 auto;\n flex-wrap: wrap;\n align-items: center;\n gap: ${smallPadding};\n min-width: 0;\n padding: ${smallPadding} ${standardPadding} ${smallPadding} ${smallPadding};\n box-sizing: border-box;\n }\n\n .chip-selector-selection-area::after {\n content: '';\n position: absolute;\n inset-block: ${smallPadding};\n inset-inline-end: 0;\n width: 2px;\n background: rgba(${borderRgbPartialColor}, 0.2);\n }\n\n /* Target only the picker's internal chips, not slotted client content. */\n .chip-selector-selection-area > nimble-chip {\n ${controlHeight.cssCustomProperty}: 24px;\n min-width: 0;\n max-width: calc(100% - ${smallPadding});\n }\n\n .chip-selector-input {\n -webkit-appearance: none;\n appearance: none;\n flex: 1 1 0;\n min-width: 0;\n width: 0;\n padding: 0;\n border: none;\n background: transparent;\n color: inherit;\n font: inherit;\n outline: none;\n }\n\n .chip-selector-input::placeholder {\n color: ${placeholderFontColor};\n }\n\n .chip-selector-menu-button {\n ${controlHeight.cssCustomProperty}: 24px;\n align-self: flex-start;\n margin-block: ${smallPadding};\n margin-inline: ${smallPadding};\n }\n\n .chip-selector-menu-icon {\n ${iconColor.cssCustomProperty}: currentColor;\n }\n\n .chip-selector-menu {\n width: 100%;\n box-sizing: border-box;\n margin-block-start: ${smallPadding};\n display: flex;\n flex-direction: column;\n max-height: 192px;\n overflow-y: auto;\n border: ${borderWidth} solid ${popupBorderColor};\n background: ${applicationBackgroundColor};\n box-shadow: ${elevation2BoxShadow};\n border-radius: 4px;\n }\n\n .chip-selector-menu[hidden] {\n display: none;\n }\n\n .chip-selector-option {\n -webkit-appearance: none;\n appearance: none;\n display: flex;\n align-items: center;\n width: 100%;\n min-width: 0;\n min-height: ${controlHeight};\n padding: 0 ${standardPadding};\n border: none;\n background: transparent;\n color: inherit;\n font: inherit;\n text-align: left;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n cursor: pointer;\n }\n\n .chip-selector-create-option {\n border-top: ${borderWidth} solid rgba(${borderRgbPartialColor}, 0.12);\n }\n\n .chip-selector-empty {\n padding: ${smallPadding} ${standardPadding};\n color: ${placeholderFontColor};\n }\n }\n\n @layer hover {\n .chip-selector-field:hover::after {\n background: ${borderHoverColor};\n }\n\n .chip-selector-option:hover,\n .chip-selector-option.active {\n background: ${fillHoverColor};\n }\n }\n\n @layer focusVisible {\n .chip-selector-field:focus-within::before {\n background: ${borderHoverColor};\n }\n\n .chip-selector-field:focus-within {\n border-bottom-color: transparent;\n }\n\n .chip-selector-field:focus-within::after {\n background: transparent;\n }\n\n .chip-selector-option:focus-visible {\n outline: ${borderWidth} solid ${borderHoverColor};\n outline-offset: -1px;\n }\n }\n\n @layer active {\n :host([open]) .chip-selector-field::before {\n background: ${borderHoverColor};\n }\n\n :host([open]) .chip-selector-field {\n border-bottom-color: transparent;\n }\n\n :host([open]) .chip-selector-field::after {\n background: transparent;\n }\n\n .chip-selector-option[aria-selected='true'] {\n background: ${fillSelectedColor};\n }\n\n .chip-selector-option[aria-selected='true']:hover {\n background: ${fillHoverSelectedColor};\n }\n\n .chip-selector-option:active {\n background: ${fillSelectedColor};\n }\n }\n\n @layer disabled {\n :host([disabled]) {\n color: ${bodyDisabledFontColor};\n }\n\n :host([disabled]) .label {\n color: ${controlLabelDisabledFontColor};\n }\n\n :host([disabled]) .chip-selector-field {\n border-color: rgba(${borderRgbPartialColor}, 0.1);\n background: rgba(${borderRgbPartialColor}, 0.07);\n }\n\n :host([disabled]) .chip-selector-field::after {\n background: transparent;\n }\n\n :host([disabled]) .chip-selector-menu-button,\n :host([disabled]) .chip-selector-input {\n cursor: not-allowed;\n }\n }\n\n @layer top {}\n`;"]}
@@ -0,0 +1,2 @@
1
+ import type { FvChipSelector } from '.';
2
+ export declare const template: import("@ni/fast-element").ViewTemplate<FvChipSelector, any>;
@@ -0,0 +1,147 @@
1
+ import { html, ref, repeat, when } from '@ni/fast-element';
2
+ import { anchoredRegionTag } from '@ni/nimble-components/dist/esm/anchored-region';
3
+ import { chipTag } from '@ni/nimble-components/dist/esm/chip';
4
+ import { ChipAppearance } from '@ni/nimble-components/dist/esm/chip/types';
5
+ import { iconArrowExpanderDownTag } from '@ni/nimble-components/dist/esm/icons/arrow-expander-down';
6
+ import { menuTag } from '@ni/nimble-components/dist/esm/menu';
7
+ import { menuItemTag } from '@ni/nimble-components/dist/esm/menu-item';
8
+ import { toggleButtonTag } from '@ni/nimble-components/dist/esm/toggle-button';
9
+ export const template = html `
10
+ <div class="chip-selector">
11
+ ${when(x => x.label.length > 0, html `
12
+ <label id="${x => x.labelId}" class="label" for="${x => x.inputId}">
13
+ ${x => x.label}
14
+ </label>
15
+ `)}
16
+ <div
17
+ class="chip-selector-field"
18
+ role="combobox"
19
+ aria-expanded="${x => x.open}"
20
+ aria-controls="${x => x.menuId}"
21
+ aria-haspopup="listbox"
22
+ aria-disabled="${x => x.disabled}"
23
+ aria-labelledby="${x => (x.label.length > 0 ? x.labelId : null)}"
24
+ ${ref('field')}
25
+ @click="${(x, c) => {
26
+ x.handleFieldClick(c.event);
27
+ return true;
28
+ }}"
29
+ >
30
+ <div class="chip-selector-selection-area">
31
+ ${repeat(x => x.selectedValueList, html `
32
+ <${chipTag}
33
+ removable
34
+ appearance="${ChipAppearance.block}"
35
+ data-chip-value="${x => x}"
36
+ ?disabled="${(_, c) => c.parent.disabled}"
37
+ @remove="${(_, c) => {
38
+ c.parent.handleChipRemove(c.event);
39
+ return true;
40
+ }}"
41
+ >
42
+ ${x => x}
43
+ </${chipTag}>
44
+ `)}
45
+ <input
46
+ id="${x => x.inputId}"
47
+ class="chip-selector-input"
48
+ type="text"
49
+ autocomplete="off"
50
+ spellcheck="false"
51
+ placeholder="${x => (x.selectedValueList.length === 0 ? x.placeholder : '')}"
52
+ :value="${x => x.filterText}"
53
+ aria-controls="${x => x.menuId}"
54
+ aria-activedescendant="${x => (x.open ? x.activeOptionId : null)}"
55
+ aria-autocomplete="list"
56
+ aria-expanded="${x => x.open}"
57
+ aria-label="${x => (x.label.length === 0 ? x.placeholder || 'Chip selector' : null)}"
58
+ aria-labelledby="${x => (x.label.length > 0 ? x.labelId : null)}"
59
+ aria-haspopup="listbox"
60
+ role="combobox"
61
+ ?disabled="${x => x.disabled}"
62
+ ${ref('captureInputRef')}
63
+ @focus="${x => {
64
+ x.handleInputFocus();
65
+ return true;
66
+ }}"
67
+ @input="${(x, c) => {
68
+ x.handleInput(c.event);
69
+ return true;
70
+ }}"
71
+ @keydown="${(x, c) => x.handleInputKeydown(c.event)}"
72
+ />
73
+ </div>
74
+ <${toggleButtonTag}
75
+ class="chip-selector-menu-button"
76
+ appearance="ghost"
77
+ :checked="${x => x.open}"
78
+ ?disabled="${x => x.disabled}"
79
+ ${ref('captureMenuButtonRef')}
80
+ @click="${(x, c) => {
81
+ x.handleMenuButtonClick(c.event);
82
+ return true;
83
+ }}"
84
+ @change="${(x, c) => {
85
+ x.handleMenuButtonChange(c.event);
86
+ return true;
87
+ }}"
88
+ content-hidden="true"
89
+ aria-hidden="true"
90
+ tabindex="-1"
91
+ >
92
+ <${iconArrowExpanderDownTag} slot="start" class="chip-selector-menu-icon"></${iconArrowExpanderDownTag}>
93
+ </${toggleButtonTag}>
94
+ </div>
95
+ ${when(x => x.open, html `
96
+ <${anchoredRegionTag}
97
+ class="chip-selector-anchored-region"
98
+ ${ref('region')}
99
+ fixed-placement
100
+ auto-update-mode="auto"
101
+ vertical-default-position="bottom"
102
+ vertical-positioning-mode="locktodefault"
103
+ horizontal-default-position="center"
104
+ horizontal-positioning-mode="locktodefault"
105
+ horizontal-scaling="anchor"
106
+ >
107
+ <div @click="${(x, c) => {
108
+ x.handleMenuClick(c.event);
109
+ return true;
110
+ }}"
111
+ >
112
+ <${menuTag}
113
+ id="${x => x.menuId}"
114
+ class="chip-selector-menu"
115
+ @change="${(_, c) => {
116
+ c.event.stopPropagation();
117
+ return true;
118
+ }}"
119
+ >
120
+ ${repeat(x => x.visibleOptionList, html `
121
+ <${menuItemTag}
122
+ id="${(_, c) => `${c.parent.menuId}-option-${c.index}`}"
123
+ class="chip-selector-option"
124
+ data-option-value="${x => x}"
125
+ >
126
+ ${x => x}
127
+ </${menuItemTag}>
128
+ `)}
129
+ ${when(x => x.customValueCandidate.length > 0, html `
130
+ <${menuItemTag}
131
+ id="${x => `${x.menuId}-option-create`}"
132
+ class="chip-selector-option chip-selector-create-option"
133
+ data-option-value="${x => x.customValueCandidate}"
134
+ >
135
+ ${x => x.createOptionLabel}
136
+ </${menuItemTag}>
137
+ `)}
138
+ ${when(x => x.showEmptyState, html `
139
+ <div class="chip-selector-empty">No matches</div>
140
+ `)}
141
+ </${menuTag}>
142
+ </div>
143
+ </${anchoredRegionTag}>
144
+ `)}
145
+ </div>
146
+ `;
147
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../../src/fv/chip-selector/template.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, ref, repeat, when } from '@ni/fast-element';\nimport { anchoredRegionTag } from '@ni/nimble-components/dist/esm/anchored-region';\nimport { chipTag } from '@ni/nimble-components/dist/esm/chip';\nimport { ChipAppearance } from '@ni/nimble-components/dist/esm/chip/types';\nimport { iconArrowExpanderDownTag } from '@ni/nimble-components/dist/esm/icons/arrow-expander-down';\nimport { menuTag } from '@ni/nimble-components/dist/esm/menu';\nimport { menuItemTag } from '@ni/nimble-components/dist/esm/menu-item';\nimport { toggleButtonTag } from '@ni/nimble-components/dist/esm/toggle-button';\nimport type { FvChipSelector } from '.';\n\nexport const template = html<FvChipSelector>`\n <div class=\"chip-selector\">\n ${when(\n x => x.label.length > 0,\n html<FvChipSelector>`\n <label id=\"${x => x.labelId}\" class=\"label\" for=\"${x => x.inputId}\">\n ${x => x.label}\n </label>\n `\n )}\n <div\n class=\"chip-selector-field\"\n role=\"combobox\"\n aria-expanded=\"${x => x.open}\"\n aria-controls=\"${x => x.menuId}\"\n aria-haspopup=\"listbox\"\n aria-disabled=\"${x => x.disabled}\"\n aria-labelledby=\"${x => (x.label.length > 0 ? x.labelId : null)}\"\n ${ref('field')}\n @click=\"${(x, c) => {\n x.handleFieldClick(c.event);\n return true;\n }}\"\n >\n <div class=\"chip-selector-selection-area\">\n ${repeat(\n x => x.selectedValueList,\n html<string, FvChipSelector>`\n <${chipTag}\n removable\n appearance=\"${ChipAppearance.block}\"\n data-chip-value=\"${x => x}\"\n ?disabled=\"${(_, c) => c.parent.disabled}\"\n @remove=\"${(_, c) => {\n c.parent.handleChipRemove(c.event);\n return true;\n }}\"\n >\n ${x => x}\n </${chipTag}>\n `\n )}\n <input\n id=\"${x => x.inputId}\"\n class=\"chip-selector-input\"\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n placeholder=\"${x => (x.selectedValueList.length === 0 ? x.placeholder : '')}\"\n :value=\"${x => x.filterText}\"\n aria-controls=\"${x => x.menuId}\"\n aria-activedescendant=\"${x => (x.open ? x.activeOptionId : null)}\"\n aria-autocomplete=\"list\"\n aria-expanded=\"${x => x.open}\"\n aria-label=\"${x => (x.label.length === 0 ? x.placeholder || 'Chip selector' : null)}\"\n aria-labelledby=\"${x => (x.label.length > 0 ? x.labelId : null)}\"\n aria-haspopup=\"listbox\"\n role=\"combobox\"\n ?disabled=\"${x => x.disabled}\"\n ${ref('captureInputRef')}\n @focus=\"${x => {\n x.handleInputFocus();\n return true;\n }}\"\n @input=\"${(x, c) => {\n x.handleInput(c.event);\n return true;\n }}\"\n @keydown=\"${(x, c) => x.handleInputKeydown(c.event as KeyboardEvent)}\"\n />\n </div>\n <${toggleButtonTag}\n class=\"chip-selector-menu-button\"\n appearance=\"ghost\"\n :checked=\"${x => x.open}\"\n ?disabled=\"${x => x.disabled}\"\n ${ref('captureMenuButtonRef')}\n @click=\"${(x, c) => {\n x.handleMenuButtonClick(c.event);\n return true;\n }}\"\n @change=\"${(x, c) => {\n x.handleMenuButtonChange(c.event);\n return true;\n }}\"\n content-hidden=\"true\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n >\n <${iconArrowExpanderDownTag} slot=\"start\" class=\"chip-selector-menu-icon\"></${iconArrowExpanderDownTag}>\n </${toggleButtonTag}>\n </div>\n ${when(\n x => x.open,\n html<FvChipSelector>`\n <${anchoredRegionTag}\n class=\"chip-selector-anchored-region\"\n ${ref('region')}\n fixed-placement\n auto-update-mode=\"auto\"\n vertical-default-position=\"bottom\"\n vertical-positioning-mode=\"locktodefault\"\n horizontal-default-position=\"center\"\n horizontal-positioning-mode=\"locktodefault\"\n horizontal-scaling=\"anchor\"\n >\n <div @click=\"${(x, c) => {\n x.handleMenuClick(c.event);\n return true;\n }}\"\n >\n <${menuTag}\n id=\"${x => x.menuId}\"\n class=\"chip-selector-menu\"\n @change=\"${(_, c) => {\n c.event.stopPropagation();\n return true;\n }}\"\n >\n ${repeat(\n x => x.visibleOptionList,\n html<string, FvChipSelector>`\n <${menuItemTag}\n id=\"${(_, c) => `${c.parent.menuId}-option-${c.index}`}\"\n class=\"chip-selector-option\"\n data-option-value=\"${x => x}\"\n >\n ${x => x}\n </${menuItemTag}>\n `\n )}\n ${when(\n x => x.customValueCandidate.length > 0,\n html<FvChipSelector>`\n <${menuItemTag}\n id=\"${x => `${x.menuId}-option-create`}\"\n class=\"chip-selector-option chip-selector-create-option\"\n data-option-value=\"${x => x.customValueCandidate}\"\n >\n ${x => x.createOptionLabel}\n </${menuItemTag}>\n `\n )}\n ${when(\n x => x.showEmptyState,\n html<FvChipSelector>`\n <div class=\"chip-selector-empty\">No matches</div>\n `\n )}\n </${menuTag}>\n </div>\n </${anchoredRegionTag}>\n `\n )}\n </div>\n`;"]}
@@ -0,0 +1,22 @@
1
+ import { FoundationElement } from '@ni/fast-foundation';
2
+ import '@ni/nimble-components/dist/esm/icons/info-circle';
3
+ import '@ni/nimble-components/dist/esm/tooltip';
4
+ import type { FvContextHelpSeverity } from './types';
5
+ export type { FvContextHelpSeverity };
6
+ declare global {
7
+ interface HTMLElementTagNameMap {
8
+ 'ok-fv-context-help': FvContextHelp;
9
+ }
10
+ }
11
+ /**
12
+ * An info trigger with an attached tooltip for lightweight contextual guidance.
13
+ */
14
+ export declare class FvContextHelp extends FoundationElement {
15
+ text: string;
16
+ triggerLabel: string;
17
+ severity: FvContextHelpSeverity;
18
+ iconVisible: boolean;
19
+ /** @internal */
20
+ readonly tooltipAnchorId: string;
21
+ }
22
+ export declare const fvContextHelpTag = "ok-fv-context-help";
@@ -0,0 +1,41 @@
1
+ import { __decorate } from "tslib";
2
+ import { attr } from '@ni/fast-element';
3
+ import { DesignSystem, FoundationElement } from '@ni/fast-foundation';
4
+ import { uniqueId } from '@ni/fast-web-utilities';
5
+ import '@ni/nimble-components/dist/esm/icons/info-circle';
6
+ import '@ni/nimble-components/dist/esm/tooltip';
7
+ import { styles } from './styles';
8
+ import { template } from './template';
9
+ /**
10
+ * An info trigger with an attached tooltip for lightweight contextual guidance.
11
+ */
12
+ export class FvContextHelp extends FoundationElement {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.text = '';
16
+ this.triggerLabel = 'Show help';
17
+ this.iconVisible = false;
18
+ /** @internal */
19
+ this.tooltipAnchorId = uniqueId('ok-fv-context-help');
20
+ }
21
+ }
22
+ __decorate([
23
+ attr
24
+ ], FvContextHelp.prototype, "text", void 0);
25
+ __decorate([
26
+ attr({ attribute: 'trigger-label' })
27
+ ], FvContextHelp.prototype, "triggerLabel", void 0);
28
+ __decorate([
29
+ attr
30
+ ], FvContextHelp.prototype, "severity", void 0);
31
+ __decorate([
32
+ attr({ attribute: 'icon-visible', mode: 'boolean' })
33
+ ], FvContextHelp.prototype, "iconVisible", void 0);
34
+ const okFvContextHelp = FvContextHelp.compose({
35
+ baseName: 'fv-context-help',
36
+ template,
37
+ styles
38
+ });
39
+ DesignSystem.getOrCreate().withPrefix('ok').register(okFvContextHelp());
40
+ export const fvContextHelpTag = 'ok-fv-context-help';
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/fv/context-help/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,kDAAkD,CAAC;AAC1D,OAAO,wCAAwC,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAWtC;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,iBAAiB;IAApD;;QAEW,SAAI,GAAG,EAAE,CAAC;QAGV,iBAAY,GAAG,WAAW,CAAC;QAM3B,gBAAW,GAAG,KAAK,CAAC;QAE3B,gBAAgB;QACA,oBAAe,GAAG,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACrE,CAAC;CAAA;AAbU;IADN,IAAI;2CACY;AAGV;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;mDACH;AAG3B;IADN,IAAI;+CACkC;AAGhC;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;kDAC1B;AAM/B,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,CAAC;IAC1C,QAAQ,EAAE,iBAAiB;IAC3B,QAAQ;IACR,MAAM;CACT,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC","sourcesContent":["import { attr } from '@ni/fast-element';\nimport { DesignSystem, FoundationElement } from '@ni/fast-foundation';\nimport { uniqueId } from '@ni/fast-web-utilities';\nimport '@ni/nimble-components/dist/esm/icons/info-circle';\nimport '@ni/nimble-components/dist/esm/tooltip';\nimport { styles } from './styles';\nimport { template } from './template';\nimport type { FvContextHelpSeverity } from './types';\n\nexport type { FvContextHelpSeverity };\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ok-fv-context-help': FvContextHelp;\n }\n}\n\n/**\n * An info trigger with an attached tooltip for lightweight contextual guidance.\n */\nexport class FvContextHelp extends FoundationElement {\n @attr\n public text = '';\n\n @attr({ attribute: 'trigger-label' })\n public triggerLabel = 'Show help';\n\n @attr\n public severity: FvContextHelpSeverity;\n\n @attr({ attribute: 'icon-visible', mode: 'boolean' })\n public iconVisible = false;\n\n /** @internal */\n public readonly tooltipAnchorId = uniqueId('ok-fv-context-help');\n}\n\nconst okFvContextHelp = FvContextHelp.compose({\n baseName: 'fv-context-help',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('ok').register(okFvContextHelp());\nexport const fvContextHelpTag = 'ok-fv-context-help';"]}
@@ -0,0 +1 @@
1
+ export declare const styles: import("@ni/fast-element").ElementStyles;
@@ -0,0 +1,55 @@
1
+ import { css } from '@ni/fast-element';
2
+ import { borderHoverColor, iconColor, iconSize, linkFontColor } from '@ni/nimble-components/dist/esm/theme-provider/design-tokens';
3
+ import { display } from '../../utilities/style/display';
4
+ export const styles = css `
5
+ @layer base, hover, focusVisible, active, disabled, top;
6
+
7
+ @layer base {
8
+ ${display('inline-flex')}
9
+
10
+ :host {
11
+ align-items: center;
12
+ margin-left: 4px;
13
+ }
14
+
15
+ .context-help-trigger {
16
+ display: inline-flex;
17
+ align-items: center;
18
+ justify-content: center;
19
+ width: ${iconSize};
20
+ height: ${iconSize};
21
+ padding: 0;
22
+ border: 0;
23
+ border-radius: 2px;
24
+ background: transparent;
25
+ color: ${linkFontColor};
26
+ cursor: help;
27
+ }
28
+
29
+ .context-help-trigger > * {
30
+ width: ${iconSize};
31
+ height: ${iconSize};
32
+ ${iconColor.cssCustomProperty}: currentColor;
33
+ }
34
+
35
+ nimble-tooltip:not(:defined) {
36
+ display: none;
37
+ }
38
+ }
39
+
40
+ @layer hover {}
41
+
42
+ @layer focusVisible {
43
+ .context-help-trigger:focus-visible {
44
+ outline: 2px solid ${borderHoverColor};
45
+ outline-offset: -2px;
46
+ }
47
+ }
48
+
49
+ @layer active {}
50
+
51
+ @layer disabled {}
52
+
53
+ @layer top {}
54
+ `;
55
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../src/fv/context-help/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EACH,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,aAAa,EAChB,MAAM,6DAA6D,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;UAIf,OAAO,CAAC,aAAa,CAAC;;;;;;;;;;;qBAWX,QAAQ;sBACP,QAAQ;;;;;qBAKT,aAAa;;;;;qBAKb,QAAQ;sBACP,QAAQ;cAChB,SAAS,CAAC,iBAAiB;;;;;;;;;;;;iCAYR,gBAAgB;;;;;;;;;;CAUhD,CAAC","sourcesContent":["import { css } from '@ni/fast-element';\nimport {\n borderHoverColor,\n iconColor,\n iconSize,\n linkFontColor\n} from '@ni/nimble-components/dist/esm/theme-provider/design-tokens';\nimport { display } from '../../utilities/style/display';\n\nexport const styles = css`\n @layer base, hover, focusVisible, active, disabled, top;\n\n @layer base {\n ${display('inline-flex')}\n\n :host {\n align-items: center;\n margin-left: 4px;\n }\n\n .context-help-trigger {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ${iconSize};\n height: ${iconSize};\n padding: 0;\n border: 0;\n border-radius: 2px;\n background: transparent;\n color: ${linkFontColor};\n cursor: help;\n }\n\n .context-help-trigger > * {\n width: ${iconSize};\n height: ${iconSize};\n ${iconColor.cssCustomProperty}: currentColor;\n }\n\n nimble-tooltip:not(:defined) {\n display: none;\n }\n }\n\n @layer hover {}\n\n @layer focusVisible {\n .context-help-trigger:focus-visible {\n outline: 2px solid ${borderHoverColor};\n outline-offset: -2px;\n }\n }\n\n @layer active {}\n\n @layer disabled {}\n\n @layer top {}\n`;"]}
@@ -0,0 +1,2 @@
1
+ import type { FvContextHelp } from '.';
2
+ export declare const template: import("@ni/fast-element").ViewTemplate<FvContextHelp, any>;
@@ -0,0 +1,24 @@
1
+ import { html, when } from '@ni/fast-element';
2
+ import { iconInfoCircleTag } from '@ni/nimble-components/dist/esm/icons/info-circle';
3
+ import { tooltipTag } from '@ni/nimble-components/dist/esm/tooltip';
4
+ export const template = html `
5
+ <button
6
+ id="${x => x.tooltipAnchorId}"
7
+ class="context-help-trigger"
8
+ type="button"
9
+ aria-label="${x => x.triggerLabel}"
10
+ >
11
+ <${iconInfoCircleTag}></${iconInfoCircleTag}>
12
+ </button>
13
+ <${tooltipTag}
14
+ anchor="${x => x.tooltipAnchorId}"
15
+ severity="${x => x.severity}"
16
+ ?icon-visible="${x => x.iconVisible}"
17
+ >
18
+ ${when(x => x.text.length > 0, html `
19
+ <span>${x => x.text}</span>
20
+ `)}
21
+ <slot></slot>
22
+ </${tooltipTag}>
23
+ `;
24
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../../src/fv/context-help/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAGpE,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAe;;cAE7B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe;;;sBAGd,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;;WAE9B,iBAAiB,MAAM,iBAAiB;;OAE5C,UAAU;kBACC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe;oBACpB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ;yBACV,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW;;UAEjC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAe;oBACtC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;SACtB,CAAC;;QAEF,UAAU;CACjB,CAAC","sourcesContent":["import { html, when } from '@ni/fast-element';\nimport { iconInfoCircleTag } from '@ni/nimble-components/dist/esm/icons/info-circle';\nimport { tooltipTag } from '@ni/nimble-components/dist/esm/tooltip';\nimport type { FvContextHelp } from '.';\n\nexport const template = html<FvContextHelp>`\n <button\n id=\"${x => x.tooltipAnchorId}\"\n class=\"context-help-trigger\"\n type=\"button\"\n aria-label=\"${x => x.triggerLabel}\"\n >\n <${iconInfoCircleTag}></${iconInfoCircleTag}>\n </button>\n <${tooltipTag}\n anchor=\"${x => x.tooltipAnchorId}\"\n severity=\"${x => x.severity}\"\n ?icon-visible=\"${x => x.iconVisible}\"\n >\n ${when(x => x.text.length > 0, html<FvContextHelp>`\n <span>${x => x.text}</span>\n `)}\n <slot></slot>\n </${tooltipTag}>\n`;"]}
@@ -0,0 +1 @@
1
+ export type FvContextHelpSeverity = 'error' | 'information' | undefined;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/fv/context-help/types.ts"],"names":[],"mappings":"","sourcesContent":["export type FvContextHelpSeverity = 'error' | 'information' | undefined;"]}
@@ -10,8 +10,10 @@ declare global {
10
10
  */
11
11
  export declare class FvSearchInput extends FoundationTextField {
12
12
  appearance: FvSearchInputAppearanceType;
13
+ /** @internal */
13
14
  handleChange(): void;
14
15
  /**
16
+ * @internal
15
17
  * Clears the current value, restores focus to the text input, and
16
18
  * dispatches a synthetic `input` event on the host so consumers
17
19
  * observe the same immediate value-update contract as typing.
@@ -12,11 +12,13 @@ export class FvSearchInput extends FoundationTextField {
12
12
  super(...arguments);
13
13
  this.appearance = FvSearchInputAppearance.outline;
14
14
  }
15
+ /** @internal */
15
16
  handleChange() {
16
17
  this.value = this.control.value;
17
18
  super.handleChange();
18
19
  }
19
20
  /**
21
+ * @internal
20
22
  * Clears the current value, restores focus to the text input, and
21
23
  * dispatches a synthetic `input` event on the host so consumers
22
24
  * observe the same immediate value-update contract as typing.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/fv/search-input/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EACH,YAAY,EACZ,SAAS,IAAI,mBAAmB,EAEnC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EACH,uBAAuB,EAE1B,MAAM,SAAS,CAAC;AAQjB;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,mBAAmB;IAAtD;;QAEW,eAAU,GAAgC,uBAAuB,CAAC,OAAO,CAAC;IAwBrF,CAAC;IAtBmB,YAAY;QACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAChC,KAAK,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;IAED;;;;;;OAMG;IACI,KAAK;QACR,IAAI,IAAI,CAAC,KAAK,KAAK,EAAE,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAxBU;IADN,IAAI;iDAC4E;AA0BrF,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,CAAmB;IAC5D,QAAQ,EAAE,iBAAiB;IAC3B,SAAS,EAAE,mBAAmB;IAC9B,QAAQ;IACR,MAAM;IACN,aAAa,EAAE;QACX,cAAc,EAAE,IAAI;KACvB;CACJ,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC","sourcesContent":["import { attr } from '@ni/fast-element';\nimport {\n DesignSystem,\n TextField as FoundationTextField,\n type TextFieldOptions\n} from '@ni/fast-foundation';\nimport { styles } from './styles';\nimport { template } from './template';\nimport {\n FvSearchInputAppearance,\n type FvSearchInputAppearance as FvSearchInputAppearanceType\n} from './types';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ok-fv-search-input': FvSearchInput;\n }\n}\n\n/**\n * A compact search input with a built-in clear affordance.\n */\nexport class FvSearchInput extends FoundationTextField {\n @attr\n public appearance: FvSearchInputAppearanceType = FvSearchInputAppearance.outline;\n\n public override handleChange(): void {\n this.value = this.control.value;\n super.handleChange();\n }\n\n /**\n * Clears the current value, restores focus to the text input, and\n * dispatches a synthetic `input` event on the host so consumers\n * observe the same immediate value-update contract as typing.\n * The inner <input> value is updated on the next FAST render cycle\n * via the `:value` template binding.\n */\n public clear(): boolean {\n if (this.value === '') {\n return true;\n }\n\n this.value = '';\n this.control.focus();\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }));\n return true;\n }\n}\n\nconst okFvSearchInput = FvSearchInput.compose<TextFieldOptions>({\n baseName: 'fv-search-input',\n baseClass: FoundationTextField,\n template,\n styles,\n shadowOptions: {\n delegatesFocus: true\n }\n});\n\nDesignSystem.getOrCreate().withPrefix('ok').register(okFvSearchInput());\nexport const fvSearchInputTag = 'ok-fv-search-input';"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/fv/search-input/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EACH,YAAY,EACZ,SAAS,IAAI,mBAAmB,EAEnC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EACH,uBAAuB,EAE1B,MAAM,SAAS,CAAC;AAQjB;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,mBAAmB;IAAtD;;QAEW,eAAU,GAAgC,uBAAuB,CAAC,OAAO,CAAC;IA0BrF,CAAC;IAxBG,gBAAgB;IACA,YAAY;QACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAChC,KAAK,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;IAED;;;;;;;OAOG;IACI,KAAK;QACR,IAAI,IAAI,CAAC,KAAK,KAAK,EAAE,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AA1BU;IADN,IAAI;iDAC4E;AA4BrF,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,CAAmB;IAC5D,QAAQ,EAAE,iBAAiB;IAC3B,SAAS,EAAE,mBAAmB;IAC9B,QAAQ;IACR,MAAM;IACN,aAAa,EAAE;QACX,cAAc,EAAE,IAAI;KACvB;CACJ,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC","sourcesContent":["import { attr } from '@ni/fast-element';\nimport {\n DesignSystem,\n TextField as FoundationTextField,\n type TextFieldOptions\n} from '@ni/fast-foundation';\nimport { styles } from './styles';\nimport { template } from './template';\nimport {\n FvSearchInputAppearance,\n type FvSearchInputAppearance as FvSearchInputAppearanceType\n} from './types';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ok-fv-search-input': FvSearchInput;\n }\n}\n\n/**\n * A compact search input with a built-in clear affordance.\n */\nexport class FvSearchInput extends FoundationTextField {\n @attr\n public appearance: FvSearchInputAppearanceType = FvSearchInputAppearance.outline;\n\n /** @internal */\n public override handleChange(): void {\n this.value = this.control.value;\n super.handleChange();\n }\n\n /**\n * @internal\n * Clears the current value, restores focus to the text input, and\n * dispatches a synthetic `input` event on the host so consumers\n * observe the same immediate value-update contract as typing.\n * The inner <input> value is updated on the next FAST render cycle\n * via the `:value` template binding.\n */\n public clear(): boolean {\n if (this.value === '') {\n return true;\n }\n\n this.value = '';\n this.control.focus();\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }));\n return true;\n }\n}\n\nconst okFvSearchInput = FvSearchInput.compose<TextFieldOptions>({\n baseName: 'fv-search-input',\n baseClass: FoundationTextField,\n template,\n styles,\n shadowOptions: {\n delegatesFocus: true\n }\n});\n\nDesignSystem.getOrCreate().withPrefix('ok').register(okFvSearchInput());\nexport const fvSearchInputTag = 'ok-fv-search-input';"]}
@@ -8,12 +8,12 @@ export const styles = css `
8
8
  ${display('inline-block')}
9
9
 
10
10
  :host {
11
- --ni-private-fv-search-input-inline-padding: ${standardPadding};
12
- --ni-private-fv-search-input-leading-inset: ${mediumPadding};
13
- --ni-private-fv-search-input-leading-space: calc(var(--ni-private-fv-search-input-leading-inset) + ${iconSize} + ${smallPadding});
14
- --ni-private-fv-search-input-trailing-space: calc(var(--ni-private-fv-search-input-inline-padding) + ${iconSize});
15
- --ni-private-fv-search-input-border-color: rgba(${borderRgbPartialColor}, 0.3);
16
- --ni-private-fv-search-input-border-radius: 0px;
11
+ --ni-private-ok-fv-search-input-inline-padding: ${standardPadding};
12
+ --ni-private-ok-fv-search-input-leading-inset: ${mediumPadding};
13
+ --ni-private-ok-fv-search-input-leading-space: calc(var(--ni-private-ok-fv-search-input-leading-inset) + ${iconSize} + ${smallPadding});
14
+ --ni-private-ok-fv-search-input-trailing-space: calc(var(--ni-private-ok-fv-search-input-inline-padding) + ${iconSize});
15
+ --ni-private-ok-fv-search-input-border-color: rgba(${borderRgbPartialColor}, 0.3);
16
+ --ni-private-ok-fv-search-input-border-radius: 0px;
17
17
  min-width: 120px;
18
18
  height: ${controlHeight};
19
19
  font: ${bodyFont};
@@ -27,7 +27,7 @@ export const styles = css `
27
27
  width: 100%;
28
28
  height: 100%;
29
29
  border: ${borderWidth} solid transparent;
30
- border-radius: var(--ni-private-fv-search-input-border-radius);
30
+ border-radius: var(--ni-private-ok-fv-search-input-border-radius);
31
31
  color: inherit;
32
32
  background-color: transparent;
33
33
  transition:
@@ -56,7 +56,7 @@ export const styles = css `
56
56
  align-items: center;
57
57
  justify-content: center;
58
58
  top: 50%;
59
- inset-inline-start: var(--ni-private-fv-search-input-leading-inset);
59
+ inset-inline-start: var(--ni-private-ok-fv-search-input-leading-inset);
60
60
  transform: translateY(-50%);
61
61
  color: ${placeholderFontColor};
62
62
  pointer-events: none;
@@ -71,7 +71,7 @@ export const styles = css `
71
71
  min-width: 0;
72
72
  width: 100%;
73
73
  height: 100%;
74
- padding: 0 var(--ni-private-fv-search-input-trailing-space) 0 var(--ni-private-fv-search-input-leading-space);
74
+ padding: 0 var(--ni-private-ok-fv-search-input-trailing-space) 0 var(--ni-private-ok-fv-search-input-leading-space);
75
75
  font: inherit;
76
76
  line-height: normal;
77
77
  color: inherit;
@@ -93,21 +93,21 @@ export const styles = css `
93
93
  align-items: center;
94
94
  justify-content: center;
95
95
  top: 50%;
96
- inset-inline-end: 2px;
96
+ inset-inline-end: 3px;
97
97
  height: calc(100% - 6px);
98
98
  aspect-ratio: 1;
99
99
  padding: 0;
100
100
  transform: translateY(-50%);
101
- color: ${placeholderFontColor};
101
+ color: inherit;
102
102
  border: none;
103
103
  border-radius: 2px;
104
104
  background: transparent;
105
105
  cursor: pointer;
106
- ${iconColor.cssCustomProperty}: ${placeholderFontColor};
106
+ ${iconColor.cssCustomProperty}: currentColor;
107
107
  }
108
108
 
109
109
  :host([appearance='outline']) .search-input-container {
110
- border-color: var(--ni-private-fv-search-input-border-color);
110
+ border-color: var(--ni-private-ok-fv-search-input-border-color);
111
111
  }
112
112
 
113
113
  :host([appearance='block']) .search-input-container {
@@ -116,7 +116,7 @@ export const styles = css `
116
116
 
117
117
  :host([appearance='underline']) .search-input-container::after {
118
118
  transform: scaleX(1);
119
- border-bottom-color: var(--ni-private-fv-search-input-border-color);
119
+ border-bottom-color: var(--ni-private-ok-fv-search-input-border-color);
120
120
  }
121
121
  }
122
122
 
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../src/fv/search-input/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EACH,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,cAAc,EACd,SAAS,EACT,QAAQ,EACR,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,eAAe,EAClB,MAAM,6DAA6D,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;UAIf,OAAO,CAAC,cAAc,CAAC;;;2DAG0B,eAAe;0DAChB,aAAa;iHAC0C,QAAQ,MAAM,YAAY;mHACxB,QAAQ;8DAC7D,qBAAqB;;;sBAG7D,aAAa;oBACf,QAAQ;qBACP,aAAa;;;;;;;;;sBASZ,WAAW;;;;;+BAKF,UAAU;6BACZ,UAAU;mCACJ,UAAU;;;;;;;yCAOJ,WAAW;kCAClB,WAAW,iBAAiB,gBAAgB;;;;4BAIlD,UAAU;sCACA,UAAU;;;;;;;;;;;;qBAY3B,oBAAoB;;cAE3B,SAAS,CAAC,iBAAiB,KAAK,oBAAoB;;;;;;;;;;;;;;;;;;;;;;qBAsB7C,oBAAoB;;;;;;;;;;;;;;;;qBAgBpB,oBAAoB;;;;;cAK3B,SAAS,CAAC,iBAAiB,KAAK,oBAAoB;;;;;;;;qCAQ7B,qBAAqB;;;;;;;;;;;0BAWhC,cAAc;;;;4BAIZ,gBAAgB;gCACZ,WAAW,IAAI,gBAAgB;;;;;mCAK5B,gBAAgB;;;;mCAIhB,gBAAgB;;;;;mCAKhB,gBAAgB;;;;;;;;;;uBAU5B,WAAW,UAAU,gBAAgB;;;;;4BAKhC,gBAAgB;gCACZ,WAAW,IAAI,gBAAgB;;;;;mCAK5B,gBAAgB;;;;mCAIhB,gBAAgB;;;;;mCAKhB,gBAAgB;;;CAGlD,CAAC","sourcesContent":["import { css } from '@ni/fast-element';\nimport {\n bodyFont,\n bodyFontColor,\n borderHoverColor,\n borderRgbPartialColor,\n borderWidth,\n controlHeight,\n fillHoverColor,\n iconColor,\n iconSize,\n mediumPadding,\n placeholderFontColor,\n smallPadding,\n smallDelay,\n standardPadding\n} from '@ni/nimble-components/dist/esm/theme-provider/design-tokens';\nimport { display } from '../../utilities/style/display';\n\nexport const styles = css`\n @layer base, hover, focusVisible, active, disabled, top;\n\n @layer base {\n ${display('inline-block')}\n\n :host {\n --ni-private-fv-search-input-inline-padding: ${standardPadding};\n --ni-private-fv-search-input-leading-inset: ${mediumPadding};\n --ni-private-fv-search-input-leading-space: calc(var(--ni-private-fv-search-input-leading-inset) + ${iconSize} + ${smallPadding});\n --ni-private-fv-search-input-trailing-space: calc(var(--ni-private-fv-search-input-inline-padding) + ${iconSize});\n --ni-private-fv-search-input-border-color: rgba(${borderRgbPartialColor}, 0.3);\n --ni-private-fv-search-input-border-radius: 0px;\n min-width: 120px;\n height: ${controlHeight};\n font: ${bodyFont};\n color: ${bodyFontColor};\n }\n\n .search-input-container {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n height: 100%;\n border: ${borderWidth} solid transparent;\n border-radius: var(--ni-private-fv-search-input-border-radius);\n color: inherit;\n background-color: transparent;\n transition:\n border-color ${smallDelay} ease-in-out,\n box-shadow ${smallDelay} ease-in-out,\n background-color ${smallDelay} ease-in-out;\n }\n\n .search-input-container::after {\n content: '';\n position: absolute;\n inset-inline: 0;\n inset-block-end: calc(-1 * ${borderWidth});\n border-bottom: calc(${borderWidth} + 1px) solid ${borderHoverColor};\n transform: scaleX(0);\n transform-origin: center;\n transition:\n transform ${smallDelay} ease-in-out,\n border-bottom-color ${smallDelay} ease-in-out;\n pointer-events: none;\n }\n\n .search-input-icon {\n position: absolute;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n top: 50%;\n inset-inline-start: var(--ni-private-fv-search-input-leading-inset);\n transform: translateY(-50%);\n color: ${placeholderFontColor};\n pointer-events: none;\n ${iconColor.cssCustomProperty}: ${placeholderFontColor};\n }\n\n .search-input {\n -webkit-appearance: none;\n appearance: none;\n display: block;\n flex: 1 1 auto;\n min-width: 0;\n width: 100%;\n height: 100%;\n padding: 0 var(--ni-private-fv-search-input-trailing-space) 0 var(--ni-private-fv-search-input-leading-space);\n font: inherit;\n line-height: normal;\n color: inherit;\n border: none;\n outline: none;\n border-radius: 0;\n background: transparent;\n }\n\n .search-input::placeholder {\n color: ${placeholderFontColor};\n }\n\n .search-input-clear {\n -webkit-appearance: none;\n appearance: none;\n position: absolute;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n top: 50%;\n inset-inline-end: 2px;\n height: calc(100% - 6px);\n aspect-ratio: 1;\n padding: 0;\n transform: translateY(-50%);\n color: ${placeholderFontColor};\n border: none;\n border-radius: 2px;\n background: transparent;\n cursor: pointer;\n ${iconColor.cssCustomProperty}: ${placeholderFontColor};\n }\n\n :host([appearance='outline']) .search-input-container {\n border-color: var(--ni-private-fv-search-input-border-color);\n }\n\n :host([appearance='block']) .search-input-container {\n background-color: rgba(${borderRgbPartialColor}, 0.1);\n }\n\n :host([appearance='underline']) .search-input-container::after {\n transform: scaleX(1);\n border-bottom-color: var(--ni-private-fv-search-input-border-color);\n }\n }\n\n @layer hover {\n .search-input-clear:hover {\n background: ${fillHoverColor};\n }\n\n :host([appearance='outline']) .search-input-container:hover {\n border-color: ${borderHoverColor};\n box-shadow: 0 0 0 ${borderWidth} ${borderHoverColor} inset;\n }\n\n :host([appearance='block']) .search-input-container:hover::after {\n transform: scaleX(1);\n border-bottom-color: ${borderHoverColor};\n }\n\n :host([appearance='underline']) .search-input-container:hover::after {\n border-bottom-color: ${borderHoverColor};\n }\n\n :host([appearance='frameless']) .search-input-container:hover::after {\n transform: scaleX(1);\n border-bottom-color: ${borderHoverColor};\n }\n }\n\n @layer focusVisible {\n .search-input:focus-visible {\n outline: none;\n }\n\n .search-input-clear:focus-visible {\n outline: ${borderWidth} solid ${borderHoverColor};\n outline-offset: -1px;\n }\n\n :host([appearance='outline']) .search-input-container:focus-within {\n border-color: ${borderHoverColor};\n box-shadow: 0 0 0 ${borderWidth} ${borderHoverColor} inset;\n }\n\n :host([appearance='block']) .search-input-container:focus-within::after {\n transform: scaleX(1);\n border-bottom-color: ${borderHoverColor};\n }\n\n :host([appearance='underline']) .search-input-container:focus-within::after {\n border-bottom-color: ${borderHoverColor};\n }\n\n :host([appearance='frameless']) .search-input-container:focus-within::after {\n transform: scaleX(1);\n border-bottom-color: ${borderHoverColor};\n }\n }\n`;"]}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../src/fv/search-input/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EACH,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,cAAc,EACd,SAAS,EACT,QAAQ,EACR,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,eAAe,EAClB,MAAM,6DAA6D,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;UAIf,OAAO,CAAC,cAAc,CAAC;;;8DAG6B,eAAe;6DAChB,aAAa;uHAC6C,QAAQ,MAAM,YAAY;yHACxB,QAAQ;iEAChE,qBAAqB;;;sBAGhE,aAAa;oBACf,QAAQ;qBACP,aAAa;;;;;;;;;sBASZ,WAAW;;;;;+BAKF,UAAU;6BACZ,UAAU;mCACJ,UAAU;;;;;;;yCAOJ,WAAW;kCAClB,WAAW,iBAAiB,gBAAgB;;;;4BAIlD,UAAU;sCACA,UAAU;;;;;;;;;;;;qBAY3B,oBAAoB;;cAE3B,SAAS,CAAC,iBAAiB,KAAK,oBAAoB;;;;;;;;;;;;;;;;;;;;;;qBAsB7C,oBAAoB;;;;;;;;;;;;;;;;;;;;;cAqB3B,SAAS,CAAC,iBAAiB;;;;;;;;qCAQJ,qBAAqB;;;;;;;;;;;0BAWhC,cAAc;;;;4BAIZ,gBAAgB;gCACZ,WAAW,IAAI,gBAAgB;;;;;mCAK5B,gBAAgB;;;;mCAIhB,gBAAgB;;;;;mCAKhB,gBAAgB;;;;;;;;;;uBAU5B,WAAW,UAAU,gBAAgB;;;;;4BAKhC,gBAAgB;gCACZ,WAAW,IAAI,gBAAgB;;;;;mCAK5B,gBAAgB;;;;mCAIhB,gBAAgB;;;;;mCAKhB,gBAAgB;;;CAGlD,CAAC","sourcesContent":["import { css } from '@ni/fast-element';\nimport {\n bodyFont,\n bodyFontColor,\n borderHoverColor,\n borderRgbPartialColor,\n borderWidth,\n controlHeight,\n fillHoverColor,\n iconColor,\n iconSize,\n mediumPadding,\n placeholderFontColor,\n smallPadding,\n smallDelay,\n standardPadding\n} from '@ni/nimble-components/dist/esm/theme-provider/design-tokens';\nimport { display } from '../../utilities/style/display';\n\nexport const styles = css`\n @layer base, hover, focusVisible, active, disabled, top;\n\n @layer base {\n ${display('inline-block')}\n\n :host {\n --ni-private-ok-fv-search-input-inline-padding: ${standardPadding};\n --ni-private-ok-fv-search-input-leading-inset: ${mediumPadding};\n --ni-private-ok-fv-search-input-leading-space: calc(var(--ni-private-ok-fv-search-input-leading-inset) + ${iconSize} + ${smallPadding});\n --ni-private-ok-fv-search-input-trailing-space: calc(var(--ni-private-ok-fv-search-input-inline-padding) + ${iconSize});\n --ni-private-ok-fv-search-input-border-color: rgba(${borderRgbPartialColor}, 0.3);\n --ni-private-ok-fv-search-input-border-radius: 0px;\n min-width: 120px;\n height: ${controlHeight};\n font: ${bodyFont};\n color: ${bodyFontColor};\n }\n\n .search-input-container {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n height: 100%;\n border: ${borderWidth} solid transparent;\n border-radius: var(--ni-private-ok-fv-search-input-border-radius);\n color: inherit;\n background-color: transparent;\n transition:\n border-color ${smallDelay} ease-in-out,\n box-shadow ${smallDelay} ease-in-out,\n background-color ${smallDelay} ease-in-out;\n }\n\n .search-input-container::after {\n content: '';\n position: absolute;\n inset-inline: 0;\n inset-block-end: calc(-1 * ${borderWidth});\n border-bottom: calc(${borderWidth} + 1px) solid ${borderHoverColor};\n transform: scaleX(0);\n transform-origin: center;\n transition:\n transform ${smallDelay} ease-in-out,\n border-bottom-color ${smallDelay} ease-in-out;\n pointer-events: none;\n }\n\n .search-input-icon {\n position: absolute;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n top: 50%;\n inset-inline-start: var(--ni-private-ok-fv-search-input-leading-inset);\n transform: translateY(-50%);\n color: ${placeholderFontColor};\n pointer-events: none;\n ${iconColor.cssCustomProperty}: ${placeholderFontColor};\n }\n\n .search-input {\n -webkit-appearance: none;\n appearance: none;\n display: block;\n flex: 1 1 auto;\n min-width: 0;\n width: 100%;\n height: 100%;\n padding: 0 var(--ni-private-ok-fv-search-input-trailing-space) 0 var(--ni-private-ok-fv-search-input-leading-space);\n font: inherit;\n line-height: normal;\n color: inherit;\n border: none;\n outline: none;\n border-radius: 0;\n background: transparent;\n }\n\n .search-input::placeholder {\n color: ${placeholderFontColor};\n }\n\n .search-input-clear {\n -webkit-appearance: none;\n appearance: none;\n position: absolute;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n top: 50%;\n inset-inline-end: 3px;\n height: calc(100% - 6px);\n aspect-ratio: 1;\n padding: 0;\n transform: translateY(-50%);\n color: inherit;\n border: none;\n border-radius: 2px;\n background: transparent;\n cursor: pointer;\n ${iconColor.cssCustomProperty}: currentColor;\n }\n\n :host([appearance='outline']) .search-input-container {\n border-color: var(--ni-private-ok-fv-search-input-border-color);\n }\n\n :host([appearance='block']) .search-input-container {\n background-color: rgba(${borderRgbPartialColor}, 0.1);\n }\n\n :host([appearance='underline']) .search-input-container::after {\n transform: scaleX(1);\n border-bottom-color: var(--ni-private-ok-fv-search-input-border-color);\n }\n }\n\n @layer hover {\n .search-input-clear:hover {\n background: ${fillHoverColor};\n }\n\n :host([appearance='outline']) .search-input-container:hover {\n border-color: ${borderHoverColor};\n box-shadow: 0 0 0 ${borderWidth} ${borderHoverColor} inset;\n }\n\n :host([appearance='block']) .search-input-container:hover::after {\n transform: scaleX(1);\n border-bottom-color: ${borderHoverColor};\n }\n\n :host([appearance='underline']) .search-input-container:hover::after {\n border-bottom-color: ${borderHoverColor};\n }\n\n :host([appearance='frameless']) .search-input-container:hover::after {\n transform: scaleX(1);\n border-bottom-color: ${borderHoverColor};\n }\n }\n\n @layer focusVisible {\n .search-input:focus-visible {\n outline: none;\n }\n\n .search-input-clear:focus-visible {\n outline: ${borderWidth} solid ${borderHoverColor};\n outline-offset: -1px;\n }\n\n :host([appearance='outline']) .search-input-container:focus-within {\n border-color: ${borderHoverColor};\n box-shadow: 0 0 0 ${borderWidth} ${borderHoverColor} inset;\n }\n\n :host([appearance='block']) .search-input-container:focus-within::after {\n transform: scaleX(1);\n border-bottom-color: ${borderHoverColor};\n }\n\n :host([appearance='underline']) .search-input-container:focus-within::after {\n border-bottom-color: ${borderHoverColor};\n }\n\n :host([appearance='frameless']) .search-input-container:focus-within::after {\n transform: scaleX(1);\n border-bottom-color: ${borderHoverColor};\n }\n }\n`;"]}
@@ -0,0 +1,43 @@
1
+ import { FoundationElement } from '@ni/fast-foundation';
2
+ import type { AnchoredRegion } from '@ni/nimble-components/dist/esm/anchored-region';
3
+ import { type FvSplitButtonAppearance as FvSplitButtonAppearanceType, type FvSplitButtonAppearanceVariant as FvSplitButtonAppearanceVariantType } from './types';
4
+ declare global {
5
+ interface HTMLElementTagNameMap {
6
+ 'ok-fv-split-button': FvSplitButton;
7
+ }
8
+ }
9
+ /**
10
+ * A button with a primary action and a secondary expandable menu surface.
11
+ */
12
+ export declare class FvSplitButton extends FoundationElement {
13
+ label: string;
14
+ disabled: boolean;
15
+ open: boolean;
16
+ appearance: FvSplitButtonAppearanceType;
17
+ appearanceVariant: FvSplitButtonAppearanceVariantType;
18
+ /** @internal */
19
+ splitButtonContainer?: HTMLDivElement;
20
+ /** @internal */
21
+ region?: AnchoredRegion;
22
+ /** @internal */
23
+ disabledChanged(): void;
24
+ /** @internal */
25
+ connectedCallback(): void;
26
+ /** @internal */
27
+ disconnectedCallback(): void;
28
+ /** @internal */
29
+ handlePrimaryClick(): void;
30
+ /** @internal */
31
+ handleToggleClick(): void;
32
+ /** @internal */
33
+ handleMenuChange(): void;
34
+ /** @internal */
35
+ regionChanged(prev: AnchoredRegion | undefined, _next: AnchoredRegion | undefined): void;
36
+ /** @internal */
37
+ splitButtonContainerChanged(): void;
38
+ private readonly documentClickHandler;
39
+ private readonly keydownHandler;
40
+ private readonly menuChangeHandler;
41
+ private setOpen;
42
+ }
43
+ export declare const fvSplitButtonTag = "ok-fv-split-button";