@rc-component/select 1.1.4 → 1.2.0-alpha.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 (99) hide show
  1. package/assets/index.css +63 -0
  2. package/assets/index.less +1 -0
  3. package/assets/patch.less +83 -0
  4. package/es/BaseSelect/index.d.ts +14 -3
  5. package/es/BaseSelect/index.js +137 -200
  6. package/es/OptionList.js +3 -3
  7. package/es/Select.d.ts +1 -1
  8. package/es/Select.js +5 -9
  9. package/es/SelectInput/Affix.d.ts +5 -0
  10. package/es/SelectInput/Affix.js +12 -0
  11. package/es/SelectInput/Content/MultipleContent.d.ts +4 -0
  12. package/es/SelectInput/Content/MultipleContent.js +152 -0
  13. package/es/SelectInput/Content/Placeholder.d.ts +5 -0
  14. package/es/SelectInput/Content/Placeholder.js +21 -0
  15. package/es/SelectInput/Content/SingleContent.d.ts +4 -0
  16. package/es/SelectInput/Content/SingleContent.js +98 -0
  17. package/es/SelectInput/Content/index.d.ts +6 -0
  18. package/es/SelectInput/Content/index.js +37 -0
  19. package/es/SelectInput/Input.d.ts +20 -0
  20. package/es/SelectInput/Input.js +214 -0
  21. package/es/SelectInput/context.d.ts +6 -0
  22. package/es/SelectInput/context.js +6 -0
  23. package/es/SelectInput/index.d.ts +39 -0
  24. package/es/SelectInput/index.js +189 -0
  25. package/es/SelectTrigger.d.ts +1 -0
  26. package/es/SelectTrigger.js +5 -3
  27. package/es/TransBtn.d.ts +10 -0
  28. package/es/TransBtn.js +12 -2
  29. package/es/hooks/useAllowClear.d.ts +8 -7
  30. package/es/hooks/useAllowClear.js +21 -23
  31. package/es/hooks/useBaseProps.d.ts +1 -0
  32. package/es/hooks/useComponents.d.ts +12 -0
  33. package/es/hooks/useComponents.js +23 -0
  34. package/es/hooks/useOpen.d.ts +15 -0
  35. package/es/hooks/useOpen.js +76 -0
  36. package/es/hooks/useSearchConfig.d.ts +2 -2
  37. package/es/hooks/useSearchConfig.js +3 -3
  38. package/es/hooks/useSelectTriggerControl.d.ts +1 -1
  39. package/es/hooks/useSelectTriggerControl.js +16 -21
  40. package/es/utils/keyUtil.js +4 -0
  41. package/lib/BaseSelect/index.d.ts +14 -3
  42. package/lib/BaseSelect/index.js +137 -201
  43. package/lib/OptionList.js +3 -3
  44. package/lib/Select.d.ts +1 -1
  45. package/lib/Select.js +5 -9
  46. package/lib/SelectInput/Affix.d.ts +5 -0
  47. package/lib/{hooks/useLayoutEffect.js → SelectInput/Affix.js} +11 -16
  48. package/lib/SelectInput/Content/MultipleContent.d.ts +4 -0
  49. package/lib/{Selector/MultipleSelector.js → SelectInput/Content/MultipleContent.js} +71 -104
  50. package/lib/SelectInput/Content/Placeholder.d.ts +5 -0
  51. package/lib/SelectInput/Content/Placeholder.js +29 -0
  52. package/lib/SelectInput/Content/SingleContent.d.ts +4 -0
  53. package/lib/SelectInput/Content/SingleContent.js +107 -0
  54. package/lib/SelectInput/Content/index.d.ts +6 -0
  55. package/lib/SelectInput/Content/index.js +46 -0
  56. package/lib/SelectInput/Input.d.ts +20 -0
  57. package/lib/SelectInput/Input.js +223 -0
  58. package/lib/SelectInput/context.d.ts +6 -0
  59. package/lib/SelectInput/context.js +15 -0
  60. package/lib/SelectInput/index.d.ts +39 -0
  61. package/lib/SelectInput/index.js +198 -0
  62. package/lib/SelectTrigger.d.ts +1 -0
  63. package/lib/SelectTrigger.js +5 -3
  64. package/lib/TransBtn.d.ts +10 -0
  65. package/lib/TransBtn.js +12 -3
  66. package/lib/hooks/useAllowClear.d.ts +8 -7
  67. package/lib/hooks/useAllowClear.js +21 -24
  68. package/lib/hooks/useBaseProps.d.ts +1 -0
  69. package/lib/hooks/useComponents.d.ts +12 -0
  70. package/lib/hooks/{useDelayReset.js → useComponents.js} +21 -30
  71. package/lib/hooks/useOpen.d.ts +15 -0
  72. package/lib/hooks/useOpen.js +82 -0
  73. package/lib/hooks/useSearchConfig.d.ts +2 -2
  74. package/lib/hooks/useSearchConfig.js +3 -3
  75. package/lib/hooks/useSelectTriggerControl.d.ts +1 -1
  76. package/lib/hooks/useSelectTriggerControl.js +16 -21
  77. package/lib/utils/keyUtil.js +4 -0
  78. package/package.json +5 -4
  79. package/es/Selector/Input.d.ts +0 -27
  80. package/es/Selector/Input.js +0 -61
  81. package/es/Selector/MultipleSelector.d.ts +0 -16
  82. package/es/Selector/MultipleSelector.js +0 -185
  83. package/es/Selector/SingleSelector.d.ts +0 -8
  84. package/es/Selector/SingleSelector.js +0 -104
  85. package/es/Selector/index.d.ts +0 -83
  86. package/es/Selector/index.js +0 -189
  87. package/es/hooks/useDelayReset.d.ts +0 -5
  88. package/es/hooks/useDelayReset.js +0 -33
  89. package/es/hooks/useLayoutEffect.d.ts +0 -5
  90. package/es/hooks/useLayoutEffect.js +0 -17
  91. package/lib/Selector/Input.d.ts +0 -27
  92. package/lib/Selector/Input.js +0 -70
  93. package/lib/Selector/MultipleSelector.d.ts +0 -16
  94. package/lib/Selector/SingleSelector.d.ts +0 -8
  95. package/lib/Selector/SingleSelector.js +0 -113
  96. package/lib/Selector/index.d.ts +0 -83
  97. package/lib/Selector/index.js +0 -196
  98. package/lib/hooks/useDelayReset.d.ts +0 -5
  99. package/lib/hooks/useLayoutEffect.d.ts +0 -5
package/assets/index.css CHANGED
@@ -1,3 +1,66 @@
1
+ .rc-select.rc-select {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ user-select: none;
5
+ border: 1px solid blue;
6
+ position: relative;
7
+ }
8
+ .rc-select.rc-select .rc-select-content {
9
+ flex: auto;
10
+ display: flex;
11
+ align-items: center;
12
+ /* Prevent content from wrapping */
13
+ min-width: 0;
14
+ /* allow flex item to shrink */
15
+ white-space: nowrap;
16
+ overflow: hidden;
17
+ text-overflow: ellipsis;
18
+ position: relative;
19
+ }
20
+ .rc-select.rc-select .rc-select-input {
21
+ border: none;
22
+ background: transparent;
23
+ }
24
+ .rc-select.rc-select .rc-select-placeholder {
25
+ opacity: 0.5;
26
+ }
27
+ .rc-select.rc-select .rc-select-placeholder::after {
28
+ content: '\00a0';
29
+ width: 0;
30
+ overflow: hidden;
31
+ }
32
+ .rc-select.rc-select .rc-select-content,
33
+ .rc-select.rc-select .rc-select-input,
34
+ .rc-select.rc-select .rc-select-placeholder {
35
+ padding: 0;
36
+ margin: 0;
37
+ line-height: 1.5;
38
+ font-size: 14px;
39
+ font-weight: normal;
40
+ }
41
+ .rc-select.rc-select .rc-select-prefix,
42
+ .rc-select.rc-select .rc-select-suffix,
43
+ .rc-select.rc-select .rc-select-clear {
44
+ flex: none;
45
+ }
46
+ .rc-select.rc-select .rc-select-clear {
47
+ position: absolute;
48
+ top: 0;
49
+ right: 0;
50
+ }
51
+ .rc-select.rc-select-single .rc-select-input {
52
+ position: absolute;
53
+ inset: 0;
54
+ }
55
+ .rc-select.rc-select-multiple .rc-select-selection-item {
56
+ background: rgba(0, 0, 0, 0.1);
57
+ border-radius: 8px;
58
+ margin-right: 4px;
59
+ }
60
+ .rc-select.rc-select-multiple .rc-select-input {
61
+ width: calc(var(--select-input-width, 10) * 1px);
62
+ min-width: 4px;
63
+ }
1
64
  * {
2
65
  box-sizing: border-box;
3
66
  }
package/assets/index.less CHANGED
@@ -1,4 +1,5 @@
1
1
  @select-prefix: ~'rc-select';
2
+ @import url('./patch.less');
2
3
 
3
4
  * {
4
5
  box-sizing: border-box;
@@ -0,0 +1,83 @@
1
+ // This is used for semantic refactoring
2
+ @import (reference) url('./index.less');
3
+
4
+ .@{select-prefix}.@{select-prefix} {
5
+ display: inline-flex;
6
+ align-items: center;
7
+ user-select: none;
8
+ border: 1px solid blue;
9
+ position: relative;
10
+
11
+ // Content 部分自动占据剩余宽度
12
+ .@{select-prefix}-content {
13
+ flex: auto;
14
+ display: flex;
15
+ align-items: center;
16
+ /* Prevent content from wrapping */
17
+ min-width: 0; /* allow flex item to shrink */
18
+ white-space: nowrap;
19
+ overflow: hidden;
20
+ text-overflow: ellipsis;
21
+ position: relative;
22
+ }
23
+
24
+ .@{select-prefix}-input {
25
+ border: none;
26
+ background: transparent;
27
+ }
28
+
29
+ .@{select-prefix}-placeholder {
30
+ opacity: 0.5;
31
+
32
+ &::after {
33
+ content: '\00a0'; // nbsp placeholder
34
+ width: 0;
35
+ overflow: hidden;
36
+ }
37
+ }
38
+
39
+ .@{select-prefix}-content,
40
+ .@{select-prefix}-input,
41
+ .@{select-prefix}-placeholder {
42
+ padding: 0;
43
+ margin: 0;
44
+ line-height: 1.5;
45
+ font-size: 14px;
46
+ font-weight: normal;
47
+ }
48
+
49
+ // 其他部分禁止自动宽度,使用内容宽度
50
+ .@{select-prefix}-prefix,
51
+ .@{select-prefix}-suffix,
52
+ .@{select-prefix}-clear {
53
+ flex: none;
54
+ }
55
+
56
+ .@{select-prefix}-clear {
57
+ position: absolute;
58
+ top: 0;
59
+ right: 0;
60
+ }
61
+
62
+ // ============================= Single =============================
63
+ &-single {
64
+ .@{select-prefix}-input {
65
+ position: absolute;
66
+ inset: 0;
67
+ }
68
+ }
69
+
70
+ // ============================ Multiple ============================
71
+ &-multiple {
72
+ .@{select-prefix}-selection-item {
73
+ background: rgba(0, 0, 0, 0.1);
74
+ border-radius: 8px;
75
+ margin-right: 4px;
76
+ }
77
+
78
+ .@{select-prefix}-input {
79
+ width: calc(var(--select-input-width, 10) * 1px);
80
+ min-width: 4px;
81
+ }
82
+ }
83
+ }
@@ -2,7 +2,15 @@ import type { AlignType, BuildInPlacements } from '@rc-component/trigger/lib/int
2
2
  import type { ScrollConfig, ScrollTo } from 'rc-virtual-list/lib/List';
3
3
  import * as React from 'react';
4
4
  import type { DisplayInfoType, DisplayValueType, Mode, Placement, RawValueType, RenderDOMFunc, RenderNode } from '../interface';
5
- export type BaseSelectSemanticName = 'prefix' | 'suffix' | 'input';
5
+ import type { ComponentsConfig } from '../hooks/useComponents';
6
+ export type BaseSelectSemanticName = 'prefix' | 'suffix' | 'input' | 'clear';
7
+ /**
8
+ * ZombieJ:
9
+ * We are currently refactoring the semantic structure of the component. Changelog:
10
+ * - Remove `suffixIcon` and change to `suffix`.
11
+ * - Add `components.root` for replacing response element.
12
+ * - Remove `getInputElement` and `getRawInputElement` since we can use `components.input` instead.
13
+ */
6
14
  export type { DisplayInfoType, DisplayValueType, Mode, Placement, RenderDOMFunc, RenderNode, RawValueType, };
7
15
  export interface RefOptionListProps {
8
16
  onKeyDown: React.KeyboardEventHandler;
@@ -84,15 +92,17 @@ export interface BaseSelectProps extends BaseSelectPrivateProps, React.AriaAttri
84
92
  maxTagPlaceholder?: React.ReactNode | ((omittedValues: DisplayValueType[]) => React.ReactNode);
85
93
  tokenSeparators?: string[];
86
94
  allowClear?: boolean | {
87
- clearIcon?: RenderNode;
95
+ clearIcon?: React.ReactNode;
88
96
  };
89
97
  prefix?: React.ReactNode;
98
+ /** @deprecated Please use `suffix` instead. */
90
99
  suffixIcon?: RenderNode;
100
+ suffix?: RenderNode;
91
101
  /**
92
102
  * Clear all icon
93
103
  * @deprecated Please use `allowClear` instead
94
104
  **/
95
- clearIcon?: RenderNode;
105
+ clearIcon?: React.ReactNode;
96
106
  /** Selector remove icon */
97
107
  removeIcon?: RenderNode;
98
108
  animation?: string;
@@ -116,6 +126,7 @@ export interface BaseSelectProps extends BaseSelectPrivateProps, React.AriaAttri
116
126
  onMouseEnter?: React.MouseEventHandler<HTMLDivElement>;
117
127
  onMouseLeave?: React.MouseEventHandler<HTMLDivElement>;
118
128
  onClick?: React.MouseEventHandler<HTMLDivElement>;
129
+ components?: ComponentsConfig;
119
130
  }
120
131
  export declare const isMultiple: (mode: Mode) => boolean;
121
132
  declare const BaseSelect: React.ForwardRefExoticComponent<BaseSelectProps & React.RefAttributes<BaseSelectRef>>;