composite-select 1.0.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.
Files changed (105) hide show
  1. package/README.md +5 -0
  2. package/commitlint.config.js +3 -0
  3. package/composition/composite-select/CompositeManager.js +43 -0
  4. package/composition/composite-select/composite-select.js +199 -0
  5. package/composition/composite-select/debounce.js +10 -0
  6. package/composition/composite-select/helpers.js +96 -0
  7. package/composition/composite-select/react.js +189 -0
  8. package/composition/container/ContainerManager.js +76 -0
  9. package/composition/img/ai.png +0 -0
  10. package/composition/img/chatgpt.png +0 -0
  11. package/composition/img/claude.png +0 -0
  12. package/composition/img/gemini.png +0 -0
  13. package/composition/img/gmail.png +0 -0
  14. package/composition/img/google_calendar.png +0 -0
  15. package/composition/img/google_drive.png +0 -0
  16. package/composition/img/google_keep.png +0 -0
  17. package/composition/img/img.json +5 -0
  18. package/composition/img/perplexity.png +0 -0
  19. package/composition/img/t3chat.png +0 -0
  20. package/composition/img/timeanddate.png +0 -0
  21. package/composition/img/tools.png +0 -0
  22. package/composition/img/youtube.png +0 -0
  23. package/composition/options-section/OptionsSectionManager.css +263 -0
  24. package/composition/options-section/OptionsSectionManager.js +486 -0
  25. package/composition/options-section/options-section.js +245 -0
  26. package/composition/options-section/react.js +90 -0
  27. package/composition/selected-section/SelectedSectionManager.css +214 -0
  28. package/composition/selected-section/SelectedSectionManager.js +336 -0
  29. package/composition/selected-section/react.js +91 -0
  30. package/composition/selected-section/selected-section.js +207 -0
  31. package/composition/unbind/clickOutside.js +17 -0
  32. package/diff/coreBundle.patch +13 -0
  33. package/diff/recorderApp.patch +13 -0
  34. package/dist/cjs/Module.cjs +15 -0
  35. package/dist/cjs/composite-select/CompositeManager.js +43 -0
  36. package/dist/cjs/composite-select/composite-select.js +199 -0
  37. package/dist/cjs/composite-select/debounce.js +10 -0
  38. package/dist/cjs/composite-select/helpers.js +96 -0
  39. package/dist/cjs/composite-select/react.js +189 -0
  40. package/dist/cjs/container/ContainerManager.js +76 -0
  41. package/dist/cjs/createSubscriber.cjs +48 -0
  42. package/dist/cjs/options-section/OptionsSectionManager.js +486 -0
  43. package/dist/cjs/options-section/options-section.js +245 -0
  44. package/dist/cjs/options-section/react.js +90 -0
  45. package/dist/cjs/selected-section/SelectedSectionManager.js +336 -0
  46. package/dist/cjs/selected-section/react.js +91 -0
  47. package/dist/cjs/selected-section/selected-section.js +207 -0
  48. package/dist/cjs/types.cjs +1 -0
  49. package/dist/cjs/unbind/clickOutside.js +17 -0
  50. package/dist/esm/Module.js +15 -0
  51. package/dist/esm/composite-select/CompositeManager.js +43 -0
  52. package/dist/esm/composite-select/composite-select.js +199 -0
  53. package/dist/esm/composite-select/debounce.js +10 -0
  54. package/dist/esm/composite-select/helpers.js +96 -0
  55. package/dist/esm/composite-select/react.js +189 -0
  56. package/dist/esm/container/ContainerManager.js +76 -0
  57. package/dist/esm/createSubscriber.js +48 -0
  58. package/dist/esm/options-section/OptionsSectionManager.js +486 -0
  59. package/dist/esm/options-section/options-section.js +245 -0
  60. package/dist/esm/options-section/react.js +90 -0
  61. package/dist/esm/selected-section/SelectedSectionManager.js +336 -0
  62. package/dist/esm/selected-section/react.js +91 -0
  63. package/dist/esm/selected-section/selected-section.js +207 -0
  64. package/dist/esm/types.js +1 -0
  65. package/dist/esm/unbind/clickOutside.js +17 -0
  66. package/dist/types/Module.d.ts +15 -0
  67. package/dist/types/composite-select/CompositeManager.d.ts +21 -0
  68. package/dist/types/composite-select/ContainerManager.html.d.ts +1 -0
  69. package/dist/types/composite-select/composite-select.d.ts +26 -0
  70. package/dist/types/composite-select/composite-select.html.d.ts +1 -0
  71. package/dist/types/composite-select/debounce.d.ts +1 -0
  72. package/dist/types/composite-select/helpers.d.ts +38 -0
  73. package/dist/types/composite-select/namesSource.d.ts +4 -0
  74. package/dist/types/composite-select/react.d.ts +61 -0
  75. package/dist/types/composite-select/urlManager.d.ts +49 -0
  76. package/dist/types/composite-select/urlManagerWc.d.ts +44 -0
  77. package/dist/types/container/ContainerManager.d.ts +33 -0
  78. package/dist/types/createSubscriber.d.ts +26 -0
  79. package/dist/types/options-section/OptionsSectionManager.d.ts +117 -0
  80. package/dist/types/options-section/OptionsSectionManager.html.d.ts +1 -0
  81. package/dist/types/options-section/OptionsSectionManagerWebComponent.attributes.html.d.ts +1 -0
  82. package/dist/types/options-section/OptionsSectionManagerWebComponent.html.d.ts +1 -0
  83. package/dist/types/options-section/OptionsSectionManagerWebComponent.nocssrequest.html.d.ts +1 -0
  84. package/dist/types/options-section/options-section.d.ts +67 -0
  85. package/dist/types/options-section/react.d.ts +27 -0
  86. package/dist/types/options-section/urlManager.d.ts +28 -0
  87. package/dist/types/selected-section/SelectedSectionManager.d.ts +89 -0
  88. package/dist/types/selected-section/SelectedSectionManager.html.d.ts +1 -0
  89. package/dist/types/selected-section/SelectedSectionManager.templates.html.d.ts +1 -0
  90. package/dist/types/selected-section/SelectedSectionManagerWebComponent.attributes.html.d.ts +1 -0
  91. package/dist/types/selected-section/SelectedSectionManagerWebComponent.html.d.ts +1 -0
  92. package/dist/types/selected-section/SelectedSectionManagerWebComponent.nocssrequest.html.d.ts +1 -0
  93. package/dist/types/selected-section/react.d.ts +32 -0
  94. package/dist/types/selected-section/selected-section.d.ts +54 -0
  95. package/dist/types/selected-section/urlManager.d.ts +25 -0
  96. package/dist/types/types.d.ts +9 -0
  97. package/dist/types/unbind/clickOutside.d.ts +1 -0
  98. package/floating-label-pattern.css +502 -0
  99. package/js/CenterAndHeightResizer.js +263 -0
  100. package/js/CenterResizer.js +190 -0
  101. package/madooei.tar.gz +0 -0
  102. package/package.json +28 -0
  103. package/release.config.js +3 -0
  104. package/test/lib.d.ts +6 -0
  105. package/test/lib.js +30 -0
@@ -0,0 +1,117 @@
1
+ import type { Item, InputChangeEvent } from "../types.js";
2
+ export type OptionsSectionManagerOptions<T extends Item> = {
3
+ options?: T[];
4
+ loading?: boolean;
5
+ value?: string;
6
+ label?: string;
7
+ onItemPick?: (item: T) => void;
8
+ onInputChange?: (e: InputChangeEvent, previousValue: string | undefined, origin: string) => void;
9
+ onCancel?: () => void;
10
+ onOk?: () => void;
11
+ onHighlightChange?: (id: string | number | null) => void;
12
+ disabled?: boolean;
13
+ maxHeight?: string;
14
+ showFilter?: boolean;
15
+ showFooter?: boolean;
16
+ renderEmpty?: (defaultRender: () => string | HTMLElement) => string | HTMLElement;
17
+ renderItem?: (item: T, defaultRender: (item: T, searchValue: string | undefined) => string | HTMLElement, searchValue: string | undefined) => string | HTMLElement;
18
+ renderList?: (list: T[], defaultRender: (list: T[]) => (string | HTMLElement)[]) => (string | HTMLElement)[];
19
+ onClear?: () => void;
20
+ onFocus?: (e: FocusEvent) => void;
21
+ onComponentChange?: (s: OptionsSectionManagerOptions<T>, reason: string) => void;
22
+ };
23
+ export type OptionsSectionManagerEvents<T extends Item> = {
24
+ onItemPick: [item: T];
25
+ onInputChange: [e: InputChangeEvent, previousValue: string | undefined, origin: string];
26
+ onCancel: [];
27
+ onOk: [];
28
+ onHighlightChange: [id: string | number | null];
29
+ onClear: [];
30
+ onFocus: [e: FocusEvent];
31
+ onComponentChange: [s: OptionsSectionManagerOptions<T>, reason: string];
32
+ };
33
+ export declare class OptionsSectionManager<T extends Item = Item> {
34
+ propOptions: OptionsSectionManagerOptions<T>;
35
+ propParentElement: HTMLElement;
36
+ propFilterContainer: HTMLElement;
37
+ propOptionsContainer: HTMLElement;
38
+ propFooterContainer: HTMLElement;
39
+ propInputElement: HTMLInputElement | null;
40
+ propSpinnerElement: HTMLElement | null;
41
+ propLabelElement: HTMLLabelElement | null;
42
+ propOkButton: HTMLButtonElement;
43
+ propLeftSpace: HTMLElement;
44
+ propCancelButton: HTMLButtonElement;
45
+ propClearButton: HTMLButtonElement;
46
+ propHighlightedId: string | number | null;
47
+ private _skipNextFocusEvent;
48
+ protected _attachedElements: Map<any, (e: KeyboardEvent) => void>;
49
+ protected _subscriber: {
50
+ bind: <K extends keyof OptionsSectionManagerEvents<T>>(event: K, handler: (...args: OptionsSectionManagerEvents<T>[K]) => void) => () => void;
51
+ unbind: <K extends keyof OptionsSectionManagerEvents<T>>(event: K, handler: (...args: OptionsSectionManagerEvents<T>[K]) => void) => void;
52
+ unbindGroup: <K extends keyof OptionsSectionManagerEvents<T>>(event: K) => void;
53
+ trigger: <K extends keyof OptionsSectionManagerEvents<T>>(event: K, ...args: OptionsSectionManagerEvents<T>[K]) => void;
54
+ destroy: () => void;
55
+ getCount: () => number;
56
+ };
57
+ constructor(bindElement: HTMLElement, options?: OptionsSectionManagerOptions<T>);
58
+ getSubscriber(): {
59
+ bind: <K extends keyof OptionsSectionManagerEvents<T>>(event: K, handler: (...args: OptionsSectionManagerEvents<T>[K]) => void) => () => void;
60
+ unbind: <K extends keyof OptionsSectionManagerEvents<T>>(event: K, handler: (...args: OptionsSectionManagerEvents<T>[K]) => void) => void;
61
+ unbindGroup: <K extends keyof OptionsSectionManagerEvents<T>>(event: K) => void;
62
+ trigger: <K extends keyof OptionsSectionManagerEvents<T>>(event: K, ...args: OptionsSectionManagerEvents<T>[K]) => void;
63
+ destroy: () => void;
64
+ getCount: () => number;
65
+ };
66
+ protected _triggerOnComponentChange(reason: string): void;
67
+ protected _scrollToHighlighted(): void;
68
+ protected _defaultRenderEmpty(): string;
69
+ protected _defaultRenderItem(item: T, searchValue: string | undefined): HTMLDivElement;
70
+ protected _defaultRenderList(list: T[]): (string | HTMLElement)[];
71
+ protected _bindEvents(): void;
72
+ protected _handleKeyDown(e: KeyboardEvent): void;
73
+ protected _updateOptionsDisplay(): void;
74
+ protected _updateLoadingDisplay(): void;
75
+ protected _updateDisabledDisplay(): void;
76
+ protected _updateFooterDisplay(): void;
77
+ protected _updateFilterDisplay(): void;
78
+ /**
79
+ * Internal helper to notify both the callback provided in options and the internal subscriber
80
+ * when the input value changes.
81
+ */
82
+ protected _triggerOnInputChange(e: InputChangeEvent, previousValue: string | undefined, origin: string): void;
83
+ /**
84
+ * Internal helper to notify both the callback provided in options and the internal subscriber
85
+ * when an item is picked (e.g. via click or Enter key).
86
+ */
87
+ protected _triggerOnItemPick(item: T): void;
88
+ setMaxHeight(maxHeight?: string): void;
89
+ setDisabled(disabled: boolean): void;
90
+ setShowFooter(show: boolean): void;
91
+ setShowFilter(show: boolean): void;
92
+ setOptions(options: T[]): void;
93
+ setLoading(loading: boolean): void;
94
+ setValue(value: string, triggerOnChange?: boolean): void;
95
+ getShowFilter(): boolean | undefined;
96
+ getShowFooter(): boolean | undefined;
97
+ getDisabled(): boolean | undefined;
98
+ getLabel(): string | undefined;
99
+ getLoading(): boolean | undefined;
100
+ getValue(): string | undefined;
101
+ getOptions(): T[];
102
+ getMaxHeight(): string | undefined;
103
+ getHighlightedId(): string | number | null;
104
+ clearSearch(triggerOnClear?: boolean, triggerOnChange?: boolean): void;
105
+ setLabel(label: string): void;
106
+ highlightAndScrollToElementOnTheList(id?: string | number | null): void;
107
+ pickHighlighted(): void;
108
+ setRenderEmpty(renderEmpty?: (defaultRender: () => string | HTMLElement) => string | HTMLElement): void;
109
+ setRenderItem(renderItem?: (item: T, defaultRender: (item: T, searchValue: string | undefined) => string | HTMLElement, searchValue: string | undefined) => string | HTMLElement): void;
110
+ setRenderList(renderList?: (list: T[], defaultRender: (list: T[]) => (string | HTMLElement)[]) => (string | HTMLElement)[]): void;
111
+ setFocus(triggerOnFocus?: boolean): void;
112
+ setBlur(): void;
113
+ protected attachArrowsUpAndDown(): void;
114
+ protected detachArrowsUpAndDown(): void;
115
+ destroy(): void;
116
+ render(): void;
117
+ }
@@ -0,0 +1 @@
1
+ import "../../../js/CenterAndHeightResizer.js";
@@ -0,0 +1 @@
1
+ import "../../../js/CenterAndHeightResizer.js";
@@ -0,0 +1 @@
1
+ import "../../../js/CenterAndHeightResizer.js";
@@ -0,0 +1 @@
1
+ import "../../../js/CenterAndHeightResizer.js";
@@ -0,0 +1,67 @@
1
+ import { OptionsSectionManager } from "./OptionsSectionManager.js";
2
+ import type { Item } from "../types.js";
3
+ /**
4
+ * Injects CSS into the Shadow DOM.
5
+ * Priority:
6
+ * 1. OptionsSection.cssText (Bundler string injection)
7
+ * 2. <meta name="select-component" content="/path1.css, /path2.css"> (Global HTML declaration in main document)
8
+ * 3. OptionsSection.defaultCssUrls (Global JS property)
9
+ *
10
+ * Example of Global HTML Declaration in the main document <head>:
11
+ * <head>
12
+ * <meta name="select-component" content="OptionsSectionManager.css" />
13
+ * </head>
14
+ */
15
+ export declare class OptionsSection<T extends Item = Item> extends HTMLElement {
16
+ /**
17
+ * Bundlers can inject raw CSS string here to avoid HTTP requests entirely.
18
+ * e.g., OptionsSection.cssText = import('./OptionsSectionManager.css?raw');
19
+ */
20
+ static cssText: string;
21
+ static defaultCssUrls: string[];
22
+ private _manager;
23
+ private _options;
24
+ private _stylesInjected;
25
+ private _mountPoint;
26
+ static get observedAttributes(): string[];
27
+ constructor();
28
+ connectedCallback(): void;
29
+ disconnectedCallback(): void;
30
+ attributeChangedCallback(name: string, _oldValue: string, newValue: string): void;
31
+ private _injectStyles;
32
+ setMaxHeight(maxHeight?: string): void;
33
+ setDisabled(disabled: boolean): void;
34
+ setShowFooter(show: boolean): void;
35
+ setShowFilter(show: boolean): void;
36
+ setOptions(options: T[]): void;
37
+ setLoading(loading: boolean): void;
38
+ setValue(value: string): void;
39
+ setLabel(label: string): void;
40
+ setRenderEmpty(renderer?: (defaultRender: () => string | HTMLElement) => string | HTMLElement): void;
41
+ setRenderItem(renderer?: (item: T, defaultRender: (item: T, searchValue: string | undefined) => string | HTMLElement, searchValue: string | undefined) => string | HTMLElement): void;
42
+ setRenderList(renderer?: (list: T[], defaultRender: (list: T[]) => (string | HTMLElement)[]) => (string | HTMLElement)[]): void;
43
+ setFocus(): void;
44
+ setBlur(): void;
45
+ highlightAndScrollToElementOnTheList(id?: string | number | null): void;
46
+ render(): void;
47
+ get options(): T[];
48
+ set options(val: T[]);
49
+ get loading(): boolean;
50
+ set loading(val: boolean);
51
+ get value(): string;
52
+ set value(val: string);
53
+ get label(): string;
54
+ set label(val: string);
55
+ get disabled(): boolean;
56
+ set disabled(val: boolean);
57
+ get maxHeight(): string;
58
+ set maxHeight(val: string);
59
+ get footer(): boolean;
60
+ set footer(val: boolean);
61
+ get filter(): boolean;
62
+ set filter(val: boolean);
63
+ get highlight(): string | number | null;
64
+ set highlight(val: string | number | null);
65
+ getManager(): OptionsSectionManager<T> | null;
66
+ private _parseJSON;
67
+ }
@@ -0,0 +1,27 @@
1
+ import React from "react";
2
+ import "./options-section.js";
3
+ import type { Item } from "../types.js";
4
+ import type { InputChangeEvent } from "../types.js";
5
+ export type OptionsSectionProps<T extends Item = Item> = {
6
+ className?: string;
7
+ style?: React.CSSProperties;
8
+ id?: string;
9
+ key?: React.Key;
10
+ ref?: React.Ref<HTMLElement>;
11
+ options?: T[] | string;
12
+ loading?: boolean;
13
+ value?: string;
14
+ label?: string;
15
+ disabled?: boolean;
16
+ "max-height"?: string;
17
+ "show-footer"?: boolean;
18
+ "show-filter"?: boolean;
19
+ onItemPick?: (item: T) => void;
20
+ onInputChange?: (e: InputChangeEvent, previousValue: string | undefined, origin: string) => void;
21
+ onCancel?: () => void;
22
+ onOk?: () => void;
23
+ onHighlightChange?: (id: string | number | null) => void;
24
+ children?: React.ReactNode;
25
+ };
26
+ export declare const OptionsSection: <T extends Item = Item>(props: OptionsSectionProps<T> & React.RefAttributes<HTMLElement>) => React.ReactElement;
27
+ export default OptionsSection;
@@ -0,0 +1,28 @@
1
+ export type OptionItem = {
2
+ id: number;
3
+ label: string;
4
+ selected?: boolean;
5
+ };
6
+ export type DemoState = {
7
+ options: OptionItem[];
8
+ left: string;
9
+ center: string;
10
+ height: string;
11
+ loading: boolean;
12
+ disabled: boolean;
13
+ setShowFooter: boolean;
14
+ setShowFilter: boolean;
15
+ maxHeight: string;
16
+ value: string;
17
+ label: string;
18
+ highlight: string;
19
+ emptyList: boolean;
20
+ };
21
+ export declare const urlStateConfig: {
22
+ toUrl: (url: URL, id: string | number, state: Partial<DemoState>) => URL;
23
+ fromUrl: (urlParams: URLSearchParams, id: string | number) => Partial<DemoState>;
24
+ getAllIds: (urlParams: URLSearchParams, idRegex?: RegExp) => number[];
25
+ removeId: (urlParams: URLSearchParams, id: string | number) => void;
26
+ };
27
+ export declare const getNextId: () => number;
28
+ export declare const setNextId: (id: number) => void;
@@ -0,0 +1,89 @@
1
+ import type { Item, InputChangeEvent } from "../types.js";
2
+ export type SelectedSectionManagerOptions<T extends Item> = {
3
+ selected?: T[];
4
+ showInput?: boolean;
5
+ value?: string;
6
+ renderItem?: (item: T, defaultRender: (item: T) => HTMLElement) => HTMLElement;
7
+ renderList?: (selected: T[], defaultRender: (selected: T[]) => HTMLElement[]) => HTMLElement[];
8
+ onDelete?: (id: string) => void;
9
+ onClear?: () => void;
10
+ onInputChange?: (e: InputChangeEvent, previousValue: string | undefined) => void;
11
+ onChange?: (selected: T[]) => void;
12
+ onFocus?: (e: FocusEvent) => void;
13
+ label?: string;
14
+ disabled?: boolean;
15
+ error?: boolean;
16
+ loading?: boolean;
17
+ showDelete?: boolean;
18
+ onComponentChange?: (s: SelectedSectionManagerOptions<T>, reason: string) => void;
19
+ renderEmpty?: (defaultRender: () => string | HTMLElement) => string | HTMLElement;
20
+ };
21
+ export type SelectedSectionManagerEvents<T extends Item> = {
22
+ onDelete: [id: string];
23
+ onClear: [];
24
+ onInputChange: [e: InputChangeEvent, previousValue: string | undefined];
25
+ onChange: [selected: T[]];
26
+ onComponentChange: [s: SelectedSectionManagerOptions<T>, reason: string];
27
+ onFocus: [e: FocusEvent];
28
+ };
29
+ export declare class SelectedSectionManager<T extends Item> {
30
+ propParentElement: HTMLElement;
31
+ propContainer: HTMLElement;
32
+ propFlexList: HTMLElement;
33
+ propButtonsContainer: HTMLElement;
34
+ propOptions: SelectedSectionManagerOptions<T>;
35
+ propInputElement: HTMLInputElement | null;
36
+ propClearButton: HTMLButtonElement;
37
+ propLoaderElement: HTMLElement | null;
38
+ propLabelElement: HTMLLabelElement | null;
39
+ private _skipNextFocusEvent;
40
+ protected _subscriber: {
41
+ bind: <K extends keyof SelectedSectionManagerEvents<T>>(event: K, handler: (...args: SelectedSectionManagerEvents<T>[K]) => void) => () => void;
42
+ unbind: <K extends keyof SelectedSectionManagerEvents<T>>(event: K, handler: (...args: SelectedSectionManagerEvents<T>[K]) => void) => void;
43
+ unbindGroup: <K extends keyof SelectedSectionManagerEvents<T>>(event: K) => void;
44
+ trigger: <K extends keyof SelectedSectionManagerEvents<T>>(event: K, ...args: SelectedSectionManagerEvents<T>[K]) => void;
45
+ destroy: () => void;
46
+ getCount: () => number;
47
+ };
48
+ constructor(parentElement: HTMLElement, options?: SelectedSectionManagerOptions<T>);
49
+ getSubscriber(): {
50
+ bind: <K extends keyof SelectedSectionManagerEvents<T>>(event: K, handler: (...args: SelectedSectionManagerEvents<T>[K]) => void) => () => void;
51
+ unbind: <K extends keyof SelectedSectionManagerEvents<T>>(event: K, handler: (...args: SelectedSectionManagerEvents<T>[K]) => void) => void;
52
+ unbindGroup: <K extends keyof SelectedSectionManagerEvents<T>>(event: K) => void;
53
+ trigger: <K extends keyof SelectedSectionManagerEvents<T>>(event: K, ...args: SelectedSectionManagerEvents<T>[K]) => void;
54
+ destroy: () => void;
55
+ getCount: () => number;
56
+ };
57
+ protected _bindEvents(): void;
58
+ protected _triggerOnComponentChange(reason: string): void;
59
+ protected _updateDeleteDisplay(): void;
60
+ protected _defaultRenderList(selected: T[]): HTMLElement[];
61
+ protected _defaultRenderItem(item: T): HTMLDivElement;
62
+ setSelected(list: T[], triggerOnChange?: boolean): void;
63
+ setShowInput(show: boolean): void;
64
+ setValue(value: string, triggerOnChange?: boolean): void;
65
+ setFocus(triggerOnFocus?: boolean): void;
66
+ clearSearch(triggerOnClear?: boolean, triggerOnChange?: boolean): void;
67
+ setLabel(label: string): void;
68
+ setError(isError: boolean): void;
69
+ setDisabled(disabled: boolean): void;
70
+ /**
71
+ * show/hide delete icon
72
+ * @param show
73
+ */
74
+ setShowDelete(show: boolean): void;
75
+ setLoading(loading: boolean): void;
76
+ render(): void;
77
+ setRenderItem(renderItem?: (item: T, defaultRender: (item: T) => HTMLElement) => HTMLElement): void;
78
+ setRenderList(renderList?: (selected: T[], defaultRender: (selected: T[]) => HTMLElement[]) => HTMLElement[]): void;
79
+ setRenderEmpty(renderEmpty?: (defaultRender: () => string | HTMLElement) => string | HTMLElement): void;
80
+ getSelected(): T[];
81
+ getShowInput(): boolean | undefined;
82
+ getValue(): string | undefined;
83
+ getLabel(): string | undefined;
84
+ getDisabled(): boolean | undefined;
85
+ getError(): boolean | undefined;
86
+ getLoading(): boolean | undefined;
87
+ getShowDelete(): boolean | undefined;
88
+ destroy(): void;
89
+ }
@@ -0,0 +1 @@
1
+ import "../../../js/CenterResizer.js";
@@ -0,0 +1 @@
1
+ import "../../../js/CenterResizer.js";
@@ -0,0 +1 @@
1
+ import "../../../js/CenterResizer.js";
@@ -0,0 +1 @@
1
+ import "../../../js/CenterResizer.js";
@@ -0,0 +1 @@
1
+ import "../../../js/CenterResizer.js";
@@ -0,0 +1,32 @@
1
+ import React from "react";
2
+ import "./selected-section.js";
3
+ import type { Item } from "../types.js";
4
+ export type SelectedSectionProps<T extends Item = Item> = {
5
+ className?: string;
6
+ style?: React.CSSProperties;
7
+ id?: string;
8
+ key?: React.Key;
9
+ ref?: React.Ref<HTMLElement>;
10
+ label?: string;
11
+ "show-input"?: boolean;
12
+ value?: string;
13
+ disabled?: boolean;
14
+ error?: boolean;
15
+ loading?: boolean;
16
+ selected?: T[] | string;
17
+ onFocus?: (detail: {
18
+ originalEvent: FocusEvent;
19
+ }) => void;
20
+ onClear?: () => void;
21
+ onInputChange?: (detail: {
22
+ originalEvent: Event;
23
+ value: string;
24
+ key: string;
25
+ previousValue?: string;
26
+ }) => void;
27
+ onDelete?: (id: string) => void;
28
+ onChange?: (selected: T[]) => void;
29
+ children?: React.ReactNode;
30
+ };
31
+ export declare const SelectedSection: <T extends Item = Item>(props: SelectedSectionProps<T> & React.RefAttributes<HTMLElement>) => React.ReactElement;
32
+ export default SelectedSection;
@@ -0,0 +1,54 @@
1
+ import { SelectedSectionManager } from "./SelectedSectionManager.js";
2
+ import type { Item } from "../types.js";
3
+ /**
4
+ * Injects CSS into the Shadow DOM.
5
+ * Priority:
6
+ * 1. SelectedSection.cssText (Bundler string injection)
7
+ * 2. <meta name="select-component" content="/path1.css, /path2.css"> (Global HTML declaration in main document)
8
+ * 3. SelectedSection.defaultCssUrls (Global JS property)
9
+ *
10
+ * Example of Global HTML Declaration in the main document <head>:
11
+ * <head>
12
+ * <meta name="select-component" content="SelectedSectionManager.css">
13
+ * </head>
14
+ */
15
+ export declare class SelectedSection<T extends Item = Item> extends HTMLElement {
16
+ private _manager;
17
+ private _options;
18
+ private _mountPoint;
19
+ private _stylesInjected;
20
+ static cssText: string;
21
+ static defaultCssUrls: string[];
22
+ static get observedAttributes(): string[];
23
+ constructor();
24
+ connectedCallback(): void;
25
+ disconnectedCallback(): void;
26
+ attributeChangedCallback(name: string, _oldValue: string, newValue: string): void;
27
+ private _injectStyles;
28
+ setSelected(list: T[]): void;
29
+ setValue(value: string): void;
30
+ clearSearch(triggerOnChange?: boolean): void;
31
+ setError(state: boolean): void;
32
+ setDisabled(state: boolean): void;
33
+ setLoading(state: boolean): void;
34
+ setLabel(text: string): void;
35
+ setShowInput(state: boolean): void;
36
+ setRenderItem(renderer?: (item: T, defaultRender: (item: T) => HTMLElement) => HTMLElement): void;
37
+ setRenderList(renderer?: (selected: T[], defaultRender: (selected: T[]) => HTMLElement[]) => HTMLElement[]): void;
38
+ render(): void;
39
+ get selected(): T[];
40
+ set selected(val: T[]);
41
+ get value(): string;
42
+ set value(val: string);
43
+ get label(): string;
44
+ set label(val: string);
45
+ get error(): boolean;
46
+ set error(val: boolean);
47
+ get disabled(): boolean;
48
+ set disabled(val: boolean);
49
+ get loading(): boolean;
50
+ set loading(val: boolean);
51
+ setFocus(): void;
52
+ getManager(): SelectedSectionManager<T> | null;
53
+ private _parseJSON;
54
+ }
@@ -0,0 +1,25 @@
1
+ export type DemoItem = {
2
+ id: number;
3
+ color?: string;
4
+ img?: string;
5
+ label: string;
6
+ };
7
+ export type DemoState = {
8
+ selected: DemoItem[];
9
+ left: string;
10
+ center: string;
11
+ error: boolean;
12
+ disabled: boolean;
13
+ loading: boolean;
14
+ showInput: boolean;
15
+ label: string;
16
+ value: string;
17
+ };
18
+ export declare const urlStateConfig: {
19
+ toUrl: (url: URL, id: string | number, state: Partial<DemoState>) => URL;
20
+ fromUrl: (urlParams: URLSearchParams, id: string | number) => Partial<DemoState>;
21
+ getAllIds: (urlParams: URLSearchParams, idRegex?: RegExp) => number[];
22
+ removeId: (urlParams: URLSearchParams, id: string | number) => void;
23
+ };
24
+ export declare const getNextId: () => number;
25
+ export declare const setNextId: (id: number) => void;
@@ -0,0 +1,9 @@
1
+ export type Item = {
2
+ id: number;
3
+ label: string;
4
+ selected?: boolean;
5
+ [key: string]: any;
6
+ };
7
+ export type InputChangeEvent = Omit<KeyboardEvent, "target"> & {
8
+ target: HTMLInputElement;
9
+ };
@@ -0,0 +1 @@
1
+ export declare function clickOutside(targets: HTMLElement | HTMLElement[], callback: (e: Event) => void): () => void;