pixelize-design-library 2.3.8 → 2.3.10

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 (155) hide show
  1. package/.claude/settings.local.json +51 -0
  2. package/.cursor/plans/current.md +8 -11
  3. package/coverage/clover.xml +405 -0
  4. package/coverage/coverage-final.json +16 -0
  5. package/coverage/coverage-summary.json +50 -0
  6. package/coverage/lcov-report/Button/Button.tsx.html +244 -0
  7. package/coverage/lcov-report/Button/index.html +116 -0
  8. package/coverage/lcov-report/Checkbox/Checkbox.tsx.html +433 -0
  9. package/coverage/lcov-report/Checkbox/index.html +116 -0
  10. package/coverage/lcov-report/Common/ErrorMessage.tsx.html +148 -0
  11. package/coverage/lcov-report/Common/FormLabel.tsx.html +331 -0
  12. package/coverage/lcov-report/Common/HelperText.tsx.html +124 -0
  13. package/coverage/lcov-report/Common/index.html +146 -0
  14. package/coverage/lcov-report/Components/Button/Button.tsx.html +244 -0
  15. package/coverage/lcov-report/Components/Button/index.html +116 -0
  16. package/coverage/lcov-report/Components/Checkbox/Checkbox.tsx.html +433 -0
  17. package/coverage/lcov-report/Components/Checkbox/index.html +116 -0
  18. package/coverage/lcov-report/Components/Common/ErrorMessage.tsx.html +148 -0
  19. package/coverage/lcov-report/Components/Common/FormLabel.tsx.html +331 -0
  20. package/coverage/lcov-report/Components/Common/HelperText.tsx.html +124 -0
  21. package/coverage/lcov-report/Components/Common/index.html +146 -0
  22. package/coverage/lcov-report/Components/CustomModulesTable/CustomModulesTable.tsx.html +712 -0
  23. package/coverage/lcov-report/Components/CustomModulesTable/DeleteModuleModal.tsx.html +343 -0
  24. package/coverage/lcov-report/Components/CustomModulesTable/EditModuleModal.tsx.html +313 -0
  25. package/coverage/lcov-report/Components/CustomModulesTable/index.html +146 -0
  26. package/coverage/lcov-report/Components/Divider/Divider.tsx.html +133 -0
  27. package/coverage/lcov-report/Components/Divider/index.html +116 -0
  28. package/coverage/lcov-report/Components/Dropdown/DropDown.tsx.html +994 -0
  29. package/coverage/lcov-report/Components/Dropdown/index.html +116 -0
  30. package/coverage/lcov-report/Components/EmptyState/EmptyState.tsx.html +466 -0
  31. package/coverage/lcov-report/Components/EmptyState/index.html +116 -0
  32. package/coverage/lcov-report/Components/Header/HeaderActions.tsx.html +373 -0
  33. package/coverage/lcov-report/Components/Header/index.html +116 -0
  34. package/coverage/lcov-report/Components/Input/TextInput.tsx.html +487 -0
  35. package/coverage/lcov-report/Components/Input/index.html +116 -0
  36. package/coverage/lcov-report/Components/Input/textInputIconSize.ts.html +205 -0
  37. package/coverage/lcov-report/Components/KanbanBoard/AccountCard.tsx.html +547 -0
  38. package/coverage/lcov-report/Components/KanbanBoard/AccountRow.tsx.html +190 -0
  39. package/coverage/lcov-report/Components/KanbanBoard/KanbanActions/KanbanActions.tsx.html +247 -0
  40. package/coverage/lcov-report/Components/KanbanBoard/KanbanActions/index.html +116 -0
  41. package/coverage/lcov-report/Components/KanbanBoard/KanbanBoard.tsx.html +3598 -0
  42. package/coverage/lcov-report/Components/KanbanBoard/MeasuredItem.tsx.html +283 -0
  43. package/coverage/lcov-report/Components/KanbanBoard/index.html +161 -0
  44. package/coverage/lcov-report/Components/OrganizationDetails/CreateOrgModal.tsx.html +511 -0
  45. package/coverage/lcov-report/Components/OrganizationDetails/DeleteOrgModal.tsx.html +334 -0
  46. package/coverage/lcov-report/Components/OrganizationDetails/OrganizationDetails.tsx.html +1519 -0
  47. package/coverage/lcov-report/Components/OrganizationDetails/index.html +146 -0
  48. package/coverage/lcov-report/Components/RolesPermission/DeleteRoleModal.tsx.html +328 -0
  49. package/coverage/lcov-report/Components/RolesPermission/RolesPermission.tsx.html +1732 -0
  50. package/coverage/lcov-report/Components/RolesPermission/index.html +131 -0
  51. package/coverage/lcov-report/Components/SearchSelect/SearchSelect.tsx.html +2575 -0
  52. package/coverage/lcov-report/Components/SearchSelect/SelectTruncatedLabel.tsx.html +202 -0
  53. package/coverage/lcov-report/Components/SearchSelect/index.html +146 -0
  54. package/coverage/lcov-report/Components/SearchSelect/searchSelectSize.ts.html +496 -0
  55. package/coverage/lcov-report/Components/Select/Select.tsx.html +361 -0
  56. package/coverage/lcov-report/Components/Select/index.html +116 -0
  57. package/coverage/lcov-report/Components/SideBar/components/OtherApps.tsx.html +562 -0
  58. package/coverage/lcov-report/Components/SideBar/components/OverflowTooltipText.tsx.html +346 -0
  59. package/coverage/lcov-report/Components/SideBar/components/index.html +116 -0
  60. package/coverage/lcov-report/Components/SignInActivityTable/SignInActivityTable.tsx.html +490 -0
  61. package/coverage/lcov-report/Components/SignInActivityTable/index.html +116 -0
  62. package/coverage/lcov-report/Components/Table/components/TableActions.tsx.html +595 -0
  63. package/coverage/lcov-report/Components/Table/components/TableBody.tsx.html +2212 -0
  64. package/coverage/lcov-report/Components/Table/components/TableGroupRow.tsx.html +358 -0
  65. package/coverage/lcov-report/Components/Table/components/TableLoading.tsx.html +358 -0
  66. package/coverage/lcov-report/Components/Table/components/index.html +161 -0
  67. package/coverage/lcov-report/Components/Table/settings/ManageColumns.tsx.html +856 -0
  68. package/coverage/lcov-report/Components/Table/settings/index.html +116 -0
  69. package/coverage/lcov-report/Components/Tag/Tag.styles.tsx.html +331 -0
  70. package/coverage/lcov-report/Components/Tag/Tag.tsx.html +256 -0
  71. package/coverage/lcov-report/Components/Tag/index.html +131 -0
  72. package/coverage/lcov-report/Components/ToolTip/ToolTip.tsx.html +286 -0
  73. package/coverage/lcov-report/Components/ToolTip/index.html +116 -0
  74. package/coverage/lcov-report/Components/UserDetails/AddUserModal.tsx.html +709 -0
  75. package/coverage/lcov-report/Components/UserDetails/ChangeRoleModal.tsx.html +505 -0
  76. package/coverage/lcov-report/Components/UserDetails/DeactivateConfirmModal.tsx.html +379 -0
  77. package/coverage/lcov-report/Components/UserDetails/UserDetails.tsx.html +1900 -0
  78. package/coverage/lcov-report/Components/UserDetails/index.html +161 -0
  79. package/coverage/lcov-report/EmptyState/EmptyState.tsx.html +466 -0
  80. package/coverage/lcov-report/EmptyState/index.html +116 -0
  81. package/coverage/lcov-report/Hooks/index.html +116 -0
  82. package/coverage/lcov-report/Hooks/usePreferences.ts.html +421 -0
  83. package/coverage/lcov-report/Input/TextInput.tsx.html +487 -0
  84. package/coverage/lcov-report/Input/index.html +131 -0
  85. package/coverage/lcov-report/Input/textInputIconSize.ts.html +205 -0
  86. package/coverage/lcov-report/KanbanBoard.tsx.html +3481 -0
  87. package/coverage/lcov-report/OrganizationDetails/CreateOrgModal.tsx.html +511 -0
  88. package/coverage/lcov-report/OrganizationDetails/DeleteOrgModal.tsx.html +334 -0
  89. package/coverage/lcov-report/OrganizationDetails/OrganizationDetails.tsx.html +1519 -0
  90. package/coverage/lcov-report/OrganizationDetails/index.html +146 -0
  91. package/coverage/lcov-report/RolesPermission/DeleteRoleModal.tsx.html +328 -0
  92. package/coverage/lcov-report/RolesPermission/RolesPermission.tsx.html +1732 -0
  93. package/coverage/lcov-report/RolesPermission/index.html +116 -0
  94. package/coverage/lcov-report/SearchSelect/SearchSelect.tsx.html +2575 -0
  95. package/coverage/lcov-report/SearchSelect/SelectTruncatedLabel.tsx.html +202 -0
  96. package/coverage/lcov-report/SearchSelect/index.html +146 -0
  97. package/coverage/lcov-report/SearchSelect/searchSelectSize.ts.html +496 -0
  98. package/coverage/lcov-report/Table/CompactSelect.tsx.html +379 -0
  99. package/coverage/lcov-report/Table/Components/ActiveFilters.tsx.html +514 -0
  100. package/coverage/lcov-report/Table/Components/HeaderActions.tsx.html +373 -0
  101. package/coverage/lcov-report/Table/Components/Pagination.tsx.html +574 -0
  102. package/coverage/lcov-report/Table/Components/TableActions.tsx.html +574 -0
  103. package/coverage/lcov-report/Table/Components/TableBody.tsx.html +1027 -0
  104. package/coverage/lcov-report/Table/Components/TableFilters.tsx.html +397 -0
  105. package/coverage/lcov-report/Table/Components/TableHeader.tsx.html +1060 -0
  106. package/coverage/lcov-report/Table/Components/TableLoading.tsx.html +361 -0
  107. package/coverage/lcov-report/Table/Components/TableSearch.tsx.html +337 -0
  108. package/coverage/lcov-report/Table/Components/index.html +266 -0
  109. package/coverage/lcov-report/Table/Components/useDebounce.ts.html +178 -0
  110. package/coverage/lcov-report/Table/Components/useTable.ts.html +778 -0
  111. package/coverage/lcov-report/Table/LeftFilterPane.tsx.html +1810 -0
  112. package/coverage/lcov-report/Table/SelectOperationControls.tsx.html +178 -0
  113. package/coverage/lcov-report/Table/Table.tsx.html +1567 -0
  114. package/coverage/lcov-report/Table/TableProps.tsx.html +658 -0
  115. package/coverage/lcov-report/Table/TableSettings/ManageColumns.tsx.html +619 -0
  116. package/coverage/lcov-report/Table/TableSettings/TableFilters.tsx.html +229 -0
  117. package/coverage/lcov-report/Table/TableSettings/TableSettings.tsx.html +532 -0
  118. package/coverage/lcov-report/Table/TableSettings/index.html +146 -0
  119. package/coverage/lcov-report/Table/TableToDo.tsx.html +973 -0
  120. package/coverage/lcov-report/Table/TextOperationControls.tsx.html +271 -0
  121. package/coverage/lcov-report/Table/filterTypes.ts.html +97 -0
  122. package/coverage/lcov-report/Table/index.html +176 -0
  123. package/coverage/lcov-report/Table/settings/ManageColumns.tsx.html +856 -0
  124. package/coverage/lcov-report/Table/settings/index.html +116 -0
  125. package/coverage/lcov-report/Tag/Tag.tsx.html +256 -0
  126. package/coverage/lcov-report/Tag/index.html +116 -0
  127. package/coverage/lcov-report/Theme/buildBrandTokens.ts.html +175 -0
  128. package/coverage/lcov-report/Theme/chartColorsFromTheme.ts.html +214 -0
  129. package/coverage/lcov-report/Theme/index.html +131 -0
  130. package/coverage/lcov-report/Theme/useCustomTheme.ts.html +100 -0
  131. package/coverage/lcov-report/ToolTip/ToolTip.tsx.html +286 -0
  132. package/coverage/lcov-report/ToolTip/index.html +116 -0
  133. package/coverage/lcov-report/UserDetails/AddUserModal.tsx.html +709 -0
  134. package/coverage/lcov-report/UserDetails/ChangeRoleModal.tsx.html +505 -0
  135. package/coverage/lcov-report/UserDetails/index.html +116 -0
  136. package/coverage/lcov-report/Utils/functions.ts.html +106 -0
  137. package/coverage/lcov-report/Utils/index.html +116 -0
  138. package/coverage/lcov-report/Utils/table.ts.html +1189 -0
  139. package/coverage/lcov-report/base.css +224 -0
  140. package/coverage/lcov-report/block-navigation.js +87 -0
  141. package/coverage/lcov-report/favicon.png +0 -0
  142. package/coverage/lcov-report/index.html +251 -0
  143. package/coverage/lcov-report/prettify.css +1 -0
  144. package/coverage/lcov-report/prettify.js +2 -0
  145. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  146. package/coverage/lcov-report/sorter.js +210 -0
  147. package/coverage/lcov.info +981 -0
  148. package/dist/Assets/defaultLogo.tsx +30 -0
  149. package/dist/Components/KanbanBoard/KanbanBoard.d.ts.map +1 -1
  150. package/dist/Components/KanbanBoard/KanbanBoard.js +38 -1
  151. package/dist/Components/Table/Table.d.ts.map +1 -1
  152. package/dist/Components/Table/Table.js +16 -7
  153. package/dist/Components/Table/settings/ManageColumns.d.ts.map +1 -1
  154. package/dist/Components/Table/settings/ManageColumns.js +2 -1
  155. package/package.json +1 -1
@@ -0,0 +1,1189 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for Utils/table.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../prettify.css" />
9
+ <link rel="stylesheet" href="../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../index.html">All files</a> / <a href="index.html">Utils</a> table.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">97.31% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>181/186</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">91.09% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>133/146</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">100% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>35/35</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">97.41% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>151/155</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line high'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a>
422
+ <a name='L357'></a><a href='#L357'>357</a>
423
+ <a name='L358'></a><a href='#L358'>358</a>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a>
431
+ <a name='L366'></a><a href='#L366'>366</a>
432
+ <a name='L367'></a><a href='#L367'>367</a>
433
+ <a name='L368'></a><a href='#L368'>368</a>
434
+ <a name='L369'></a><a href='#L369'>369</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
435
+ <span class="cline-any cline-neutral">&nbsp;</span>
436
+ <span class="cline-any cline-neutral">&nbsp;</span>
437
+ <span class="cline-any cline-neutral">&nbsp;</span>
438
+ <span class="cline-any cline-neutral">&nbsp;</span>
439
+ <span class="cline-any cline-neutral">&nbsp;</span>
440
+ <span class="cline-any cline-neutral">&nbsp;</span>
441
+ <span class="cline-any cline-neutral">&nbsp;</span>
442
+ <span class="cline-any cline-neutral">&nbsp;</span>
443
+ <span class="cline-any cline-neutral">&nbsp;</span>
444
+ <span class="cline-any cline-yes">18x</span>
445
+ <span class="cline-any cline-yes">17x</span>
446
+ <span class="cline-any cline-yes">17x</span>
447
+ <span class="cline-any cline-yes">17x</span>
448
+ <span class="cline-any cline-yes">17x</span>
449
+ <span class="cline-any cline-yes">17x</span>
450
+ <span class="cline-any cline-yes">17x</span>
451
+ <span class="cline-any cline-yes">16x</span>
452
+ <span class="cline-any cline-yes">15x</span>
453
+ <span class="cline-any cline-neutral">&nbsp;</span>
454
+ <span class="cline-any cline-yes">14x</span>
455
+ <span class="cline-any cline-yes">14x</span>
456
+ <span class="cline-any cline-yes">14x</span>
457
+ <span class="cline-any cline-neutral">&nbsp;</span>
458
+ <span class="cline-any cline-yes">5x</span>
459
+ <span class="cline-any cline-yes">5x</span>
460
+ <span class="cline-any cline-yes">5x</span>
461
+ <span class="cline-any cline-neutral">&nbsp;</span>
462
+ <span class="cline-any cline-yes">3x</span>
463
+ <span class="cline-any cline-neutral">&nbsp;</span>
464
+ <span class="cline-any cline-neutral">&nbsp;</span>
465
+ <span class="cline-any cline-neutral">&nbsp;</span>
466
+ <span class="cline-any cline-neutral">&nbsp;</span>
467
+ <span class="cline-any cline-neutral">&nbsp;</span>
468
+ <span class="cline-any cline-neutral">&nbsp;</span>
469
+ <span class="cline-any cline-neutral">&nbsp;</span>
470
+ <span class="cline-any cline-neutral">&nbsp;</span>
471
+ <span class="cline-any cline-neutral">&nbsp;</span>
472
+ <span class="cline-any cline-yes">8x</span>
473
+ <span class="cline-any cline-yes">5x</span>
474
+ <span class="cline-any cline-yes">4x</span>
475
+ <span class="cline-any cline-yes">6x</span>
476
+ <span class="cline-any cline-yes">9x</span>
477
+ <span class="cline-any cline-yes">9x</span>
478
+ <span class="cline-any cline-neutral">&nbsp;</span>
479
+ <span class="cline-any cline-no">&nbsp;</span>
480
+ <span class="cline-any cline-neutral">&nbsp;</span>
481
+ <span class="cline-any cline-neutral">&nbsp;</span>
482
+ <span class="cline-any cline-neutral">&nbsp;</span>
483
+ <span class="cline-any cline-neutral">&nbsp;</span>
484
+ <span class="cline-any cline-neutral">&nbsp;</span>
485
+ <span class="cline-any cline-neutral">&nbsp;</span>
486
+ <span class="cline-any cline-yes">4x</span>
487
+ <span class="cline-any cline-yes">385x</span>
488
+ <span class="cline-any cline-neutral">&nbsp;</span>
489
+ <span class="cline-any cline-neutral">&nbsp;</span>
490
+ <span class="cline-any cline-neutral">&nbsp;</span>
491
+ <span class="cline-any cline-yes">41x</span>
492
+ <span class="cline-any cline-yes">41x</span>
493
+ <span class="cline-any cline-neutral">&nbsp;</span>
494
+ <span class="cline-any cline-neutral">&nbsp;</span>
495
+ <span class="cline-any cline-neutral">&nbsp;</span>
496
+ <span class="cline-any cline-neutral">&nbsp;</span>
497
+ <span class="cline-any cline-neutral">&nbsp;</span>
498
+ <span class="cline-any cline-neutral">&nbsp;</span>
499
+ <span class="cline-any cline-neutral">&nbsp;</span>
500
+ <span class="cline-any cline-neutral">&nbsp;</span>
501
+ <span class="cline-any cline-neutral">&nbsp;</span>
502
+ <span class="cline-any cline-neutral">&nbsp;</span>
503
+ <span class="cline-any cline-neutral">&nbsp;</span>
504
+ <span class="cline-any cline-yes">41x</span>
505
+ <span class="cline-any cline-yes">41x</span>
506
+ <span class="cline-any cline-yes">383x</span>
507
+ <span class="cline-any cline-neutral">&nbsp;</span>
508
+ <span class="cline-any cline-neutral">&nbsp;</span>
509
+ <span class="cline-any cline-neutral">&nbsp;</span>
510
+ <span class="cline-any cline-neutral">&nbsp;</span>
511
+ <span class="cline-any cline-neutral">&nbsp;</span>
512
+ <span class="cline-any cline-neutral">&nbsp;</span>
513
+ <span class="cline-any cline-yes">4x</span>
514
+ <span class="cline-any cline-yes">63x</span>
515
+ <span class="cline-any cline-yes">63x</span>
516
+ <span class="cline-any cline-yes">382x</span>
517
+ <span class="cline-any cline-yes">63x</span>
518
+ <span class="cline-any cline-neutral">&nbsp;</span>
519
+ <span class="cline-any cline-neutral">&nbsp;</span>
520
+ <span class="cline-any cline-neutral">&nbsp;</span>
521
+ <span class="cline-any cline-neutral">&nbsp;</span>
522
+ <span class="cline-any cline-neutral">&nbsp;</span>
523
+ <span class="cline-any cline-neutral">&nbsp;</span>
524
+ <span class="cline-any cline-neutral">&nbsp;</span>
525
+ <span class="cline-any cline-neutral">&nbsp;</span>
526
+ <span class="cline-any cline-yes">66x</span>
527
+ <span class="cline-any cline-yes">64x</span>
528
+ <span class="cline-any cline-yes">63x</span>
529
+ <span class="cline-any cline-neutral">&nbsp;</span>
530
+ <span class="cline-any cline-neutral">&nbsp;</span>
531
+ <span class="cline-any cline-neutral">&nbsp;</span>
532
+ <span class="cline-any cline-neutral">&nbsp;</span>
533
+ <span class="cline-any cline-neutral">&nbsp;</span>
534
+ <span class="cline-any cline-neutral">&nbsp;</span>
535
+ <span class="cline-any cline-neutral">&nbsp;</span>
536
+ <span class="cline-any cline-neutral">&nbsp;</span>
537
+ <span class="cline-any cline-neutral">&nbsp;</span>
538
+ <span class="cline-any cline-neutral">&nbsp;</span>
539
+ <span class="cline-any cline-neutral">&nbsp;</span>
540
+ <span class="cline-any cline-yes">2x</span>
541
+ <span class="cline-any cline-yes">2x</span>
542
+ <span class="cline-any cline-yes">2x</span>
543
+ <span class="cline-any cline-yes">4x</span>
544
+ <span class="cline-any cline-yes">4x</span>
545
+ <span class="cline-any cline-yes">4x</span>
546
+ <span class="cline-any cline-yes">3x</span>
547
+ <span class="cline-any cline-yes">3x</span>
548
+ <span class="cline-any cline-neutral">&nbsp;</span>
549
+ <span class="cline-any cline-yes">4x</span>
550
+ <span class="cline-any cline-neutral">&nbsp;</span>
551
+ <span class="cline-any cline-yes">3x</span>
552
+ <span class="cline-any cline-neutral">&nbsp;</span>
553
+ <span class="cline-any cline-neutral">&nbsp;</span>
554
+ <span class="cline-any cline-yes">4x</span>
555
+ <span class="cline-any cline-neutral">&nbsp;</span>
556
+ <span class="cline-any cline-neutral">&nbsp;</span>
557
+ <span class="cline-any cline-neutral">&nbsp;</span>
558
+ <span class="cline-any cline-yes">4x</span>
559
+ <span class="cline-any cline-neutral">&nbsp;</span>
560
+ <span class="cline-any cline-neutral">&nbsp;</span>
561
+ <span class="cline-any cline-yes">4x</span>
562
+ <span class="cline-any cline-yes">4x</span>
563
+ <span class="cline-any cline-yes">2x</span>
564
+ <span class="cline-any cline-neutral">&nbsp;</span>
565
+ <span class="cline-any cline-neutral">&nbsp;</span>
566
+ <span class="cline-any cline-yes">2x</span>
567
+ <span class="cline-any cline-no">&nbsp;</span>
568
+ <span class="cline-any cline-neutral">&nbsp;</span>
569
+ <span class="cline-any cline-neutral">&nbsp;</span>
570
+ <span class="cline-any cline-yes">2x</span>
571
+ <span class="cline-any cline-yes">2x</span>
572
+ <span class="cline-any cline-yes">2x</span>
573
+ <span class="cline-any cline-neutral">&nbsp;</span>
574
+ <span class="cline-any cline-neutral">&nbsp;</span>
575
+ <span class="cline-any cline-no">&nbsp;</span>
576
+ <span class="cline-any cline-neutral">&nbsp;</span>
577
+ <span class="cline-any cline-neutral">&nbsp;</span>
578
+ <span class="cline-any cline-neutral">&nbsp;</span>
579
+ <span class="cline-any cline-yes">4x</span>
580
+ <span class="cline-any cline-yes">11x</span>
581
+ <span class="cline-any cline-yes">8x</span>
582
+ <span class="cline-any cline-yes">7x</span>
583
+ <span class="cline-any cline-yes">7x</span>
584
+ <span class="cline-any cline-yes">7x</span>
585
+ <span class="cline-any cline-yes">1x</span>
586
+ <span class="cline-any cline-neutral">&nbsp;</span>
587
+ <span class="cline-any cline-yes">6x</span>
588
+ <span class="cline-any cline-yes">5x</span>
589
+ <span class="cline-any cline-yes">4x</span>
590
+ <span class="cline-any cline-yes">3x</span>
591
+ <span class="cline-any cline-yes">2x</span>
592
+ <span class="cline-any cline-yes">1x</span>
593
+ <span class="cline-any cline-neutral">&nbsp;</span>
594
+ <span class="cline-any cline-neutral">&nbsp;</span>
595
+ <span class="cline-any cline-neutral">&nbsp;</span>
596
+ <span class="cline-any cline-neutral">&nbsp;</span>
597
+ <span class="cline-any cline-neutral">&nbsp;</span>
598
+ <span class="cline-any cline-neutral">&nbsp;</span>
599
+ <span class="cline-any cline-neutral">&nbsp;</span>
600
+ <span class="cline-any cline-yes">4x</span>
601
+ <span class="cline-any cline-yes">60x</span>
602
+ <span class="cline-any cline-yes">59x</span>
603
+ <span class="cline-any cline-yes">45x</span>
604
+ <span class="cline-any cline-neutral">&nbsp;</span>
605
+ <span class="cline-any cline-yes">14x</span>
606
+ <span class="cline-any cline-yes">2x</span>
607
+ <span class="cline-any cline-neutral">&nbsp;</span>
608
+ <span class="cline-any cline-yes">12x</span>
609
+ <span class="cline-any cline-yes">2x</span>
610
+ <span class="cline-any cline-neutral">&nbsp;</span>
611
+ <span class="cline-any cline-yes">11x</span>
612
+ <span class="cline-any cline-yes">11x</span>
613
+ <span class="cline-any cline-neutral">&nbsp;</span>
614
+ <span class="cline-any cline-no">&nbsp;</span>
615
+ <span class="cline-any cline-neutral">&nbsp;</span>
616
+ <span class="cline-any cline-neutral">&nbsp;</span>
617
+ <span class="cline-any cline-neutral">&nbsp;</span>
618
+ <span class="cline-any cline-neutral">&nbsp;</span>
619
+ <span class="cline-any cline-neutral">&nbsp;</span>
620
+ <span class="cline-any cline-neutral">&nbsp;</span>
621
+ <span class="cline-any cline-neutral">&nbsp;</span>
622
+ <span class="cline-any cline-yes">255x</span>
623
+ <span class="cline-any cline-yes">253x</span>
624
+ <span class="cline-any cline-neutral">&nbsp;</span>
625
+ <span class="cline-any cline-neutral">&nbsp;</span>
626
+ <span class="cline-any cline-neutral">&nbsp;</span>
627
+ <span class="cline-any cline-neutral">&nbsp;</span>
628
+ <span class="cline-any cline-yes">240x</span>
629
+ <span class="cline-any cline-neutral">&nbsp;</span>
630
+ <span class="cline-any cline-yes">13x</span>
631
+ <span class="cline-any cline-yes">3x</span>
632
+ <span class="cline-any cline-neutral">&nbsp;</span>
633
+ <span class="cline-any cline-neutral">&nbsp;</span>
634
+ <span class="cline-any cline-yes">10x</span>
635
+ <span class="cline-any cline-neutral">&nbsp;</span>
636
+ <span class="cline-any cline-neutral">&nbsp;</span>
637
+ <span class="cline-any cline-yes">4x</span>
638
+ <span class="cline-any cline-neutral">&nbsp;</span>
639
+ <span class="cline-any cline-neutral">&nbsp;</span>
640
+ <span class="cline-any cline-neutral">&nbsp;</span>
641
+ <span class="cline-any cline-yes">3x</span>
642
+ <span class="cline-any cline-yes">6x</span>
643
+ <span class="cline-any cline-yes">8x</span>
644
+ <span class="cline-any cline-yes">8x</span>
645
+ <span class="cline-any cline-yes">8x</span>
646
+ <span class="cline-any cline-neutral">&nbsp;</span>
647
+ <span class="cline-any cline-neutral">&nbsp;</span>
648
+ <span class="cline-any cline-neutral">&nbsp;</span>
649
+ <span class="cline-any cline-yes">3x</span>
650
+ <span class="cline-any cline-yes">1x</span>
651
+ <span class="cline-any cline-yes">1x</span>
652
+ <span class="cline-any cline-neutral">&nbsp;</span>
653
+ <span class="cline-any cline-yes">1x</span>
654
+ <span class="cline-any cline-yes">1x</span>
655
+ <span class="cline-any cline-yes">1x</span>
656
+ <span class="cline-any cline-yes">1x</span>
657
+ <span class="cline-any cline-neutral">&nbsp;</span>
658
+ <span class="cline-any cline-yes">1x</span>
659
+ <span class="cline-any cline-yes">1x</span>
660
+ <span class="cline-any cline-neutral">&nbsp;</span>
661
+ <span class="cline-any cline-yes">1x</span>
662
+ <span class="cline-any cline-yes">1x</span>
663
+ <span class="cline-any cline-neutral">&nbsp;</span>
664
+ <span class="cline-any cline-neutral">&nbsp;</span>
665
+ <span class="cline-any cline-yes">1x</span>
666
+ <span class="cline-any cline-neutral">&nbsp;</span>
667
+ <span class="cline-any cline-neutral">&nbsp;</span>
668
+ <span class="cline-any cline-neutral">&nbsp;</span>
669
+ <span class="cline-any cline-neutral">&nbsp;</span>
670
+ <span class="cline-any cline-neutral">&nbsp;</span>
671
+ <span class="cline-any cline-neutral">&nbsp;</span>
672
+ <span class="cline-any cline-neutral">&nbsp;</span>
673
+ <span class="cline-any cline-neutral">&nbsp;</span>
674
+ <span class="cline-any cline-yes">1x</span>
675
+ <span class="cline-any cline-yes">2x</span>
676
+ <span class="cline-any cline-yes">2x</span>
677
+ <span class="cline-any cline-yes">1x</span>
678
+ <span class="cline-any cline-neutral">&nbsp;</span>
679
+ <span class="cline-any cline-neutral">&nbsp;</span>
680
+ <span class="cline-any cline-neutral">&nbsp;</span>
681
+ <span class="cline-any cline-neutral">&nbsp;</span>
682
+ <span class="cline-any cline-neutral">&nbsp;</span>
683
+ <span class="cline-any cline-neutral">&nbsp;</span>
684
+ <span class="cline-any cline-neutral">&nbsp;</span>
685
+ <span class="cline-any cline-neutral">&nbsp;</span>
686
+ <span class="cline-any cline-yes">1x</span>
687
+ <span class="cline-any cline-yes">1x</span>
688
+ <span class="cline-any cline-neutral">&nbsp;</span>
689
+ <span class="cline-any cline-yes">1x</span>
690
+ <span class="cline-any cline-yes">1x</span>
691
+ <span class="cline-any cline-neutral">&nbsp;</span>
692
+ <span class="cline-any cline-neutral">&nbsp;</span>
693
+ <span class="cline-any cline-yes">1x</span>
694
+ <span class="cline-any cline-neutral">&nbsp;</span>
695
+ <span class="cline-any cline-yes">2x</span>
696
+ <span class="cline-any cline-yes">1x</span>
697
+ <span class="cline-any cline-neutral">&nbsp;</span>
698
+ <span class="cline-any cline-neutral">&nbsp;</span>
699
+ <span class="cline-any cline-yes">2x</span>
700
+ <span class="cline-any cline-yes">1x</span>
701
+ <span class="cline-any cline-neutral">&nbsp;</span>
702
+ <span class="cline-any cline-neutral">&nbsp;</span>
703
+ <span class="cline-any cline-neutral">&nbsp;</span>
704
+ <span class="cline-any cline-neutral">&nbsp;</span>
705
+ <span class="cline-any cline-neutral">&nbsp;</span>
706
+ <span class="cline-any cline-yes">1x</span>
707
+ <span class="cline-any cline-neutral">&nbsp;</span>
708
+ <span class="cline-any cline-neutral">&nbsp;</span>
709
+ <span class="cline-any cline-yes">4x</span>
710
+ <span class="cline-any cline-yes">3x</span>
711
+ <span class="cline-any cline-yes">3x</span>
712
+ <span class="cline-any cline-yes">1x</span>
713
+ <span class="cline-any cline-yes">2x</span>
714
+ <span class="cline-any cline-yes">1x</span>
715
+ <span class="cline-any cline-neutral">&nbsp;</span>
716
+ <span class="cline-any cline-yes">1x</span>
717
+ <span class="cline-any cline-neutral">&nbsp;</span>
718
+ <span class="cline-any cline-neutral">&nbsp;</span>
719
+ <span class="cline-any cline-neutral">&nbsp;</span>
720
+ <span class="cline-any cline-neutral">&nbsp;</span>
721
+ <span class="cline-any cline-neutral">&nbsp;</span>
722
+ <span class="cline-any cline-neutral">&nbsp;</span>
723
+ <span class="cline-any cline-neutral">&nbsp;</span>
724
+ <span class="cline-any cline-neutral">&nbsp;</span>
725
+ <span class="cline-any cline-neutral">&nbsp;</span>
726
+ <span class="cline-any cline-neutral">&nbsp;</span>
727
+ <span class="cline-any cline-neutral">&nbsp;</span>
728
+ <span class="cline-any cline-neutral">&nbsp;</span>
729
+ <span class="cline-any cline-neutral">&nbsp;</span>
730
+ <span class="cline-any cline-neutral">&nbsp;</span>
731
+ <span class="cline-any cline-yes">4x</span>
732
+ <span class="cline-any cline-neutral">&nbsp;</span>
733
+ <span class="cline-any cline-neutral">&nbsp;</span>
734
+ <span class="cline-any cline-neutral">&nbsp;</span>
735
+ <span class="cline-any cline-neutral">&nbsp;</span>
736
+ <span class="cline-any cline-neutral">&nbsp;</span>
737
+ <span class="cline-any cline-neutral">&nbsp;</span>
738
+ <span class="cline-any cline-neutral">&nbsp;</span>
739
+ <span class="cline-any cline-neutral">&nbsp;</span>
740
+ <span class="cline-any cline-neutral">&nbsp;</span>
741
+ <span class="cline-any cline-neutral">&nbsp;</span>
742
+ <span class="cline-any cline-yes">5x</span>
743
+ <span class="cline-any cline-neutral">&nbsp;</span>
744
+ <span class="cline-any cline-neutral">&nbsp;</span>
745
+ <span class="cline-any cline-yes">5x</span>
746
+ <span class="cline-any cline-neutral">&nbsp;</span>
747
+ <span class="cline-any cline-neutral">&nbsp;</span>
748
+ <span class="cline-any cline-yes">5x</span>
749
+ <span class="cline-any cline-yes">5x</span>
750
+ <span class="cline-any cline-yes">5x</span>
751
+ <span class="cline-any cline-yes">5x</span>
752
+ <span class="cline-any cline-yes">1x</span>
753
+ <span class="cline-any cline-neutral">&nbsp;</span>
754
+ <span class="cline-any cline-yes">1x</span>
755
+ <span class="cline-any cline-yes">4x</span>
756
+ <span class="cline-any cline-yes">2x</span>
757
+ <span class="cline-any cline-yes">2x</span>
758
+ <span class="cline-any cline-yes">2x</span>
759
+ <span class="cline-any cline-yes">1x</span>
760
+ <span class="cline-any cline-neutral">&nbsp;</span>
761
+ <span class="cline-any cline-neutral">&nbsp;</span>
762
+ <span class="cline-any cline-yes">5x</span>
763
+ <span class="cline-any cline-yes">5x</span>
764
+ <span class="cline-any cline-yes">5x</span>
765
+ <span class="cline-any cline-yes">1x</span>
766
+ <span class="cline-any cline-yes">1x</span>
767
+ <span class="cline-any cline-neutral">&nbsp;</span>
768
+ <span class="cline-any cline-neutral">&nbsp;</span>
769
+ <span class="cline-any cline-yes">5x</span>
770
+ <span class="cline-any cline-neutral">&nbsp;</span>
771
+ <span class="cline-any cline-neutral">&nbsp;</span>
772
+ <span class="cline-any cline-neutral">&nbsp;</span>
773
+ <span class="cline-any cline-neutral">&nbsp;</span>
774
+ <span class="cline-any cline-neutral">&nbsp;</span>
775
+ <span class="cline-any cline-neutral">&nbsp;</span>
776
+ <span class="cline-any cline-neutral">&nbsp;</span>
777
+ <span class="cline-any cline-neutral">&nbsp;</span>
778
+ <span class="cline-any cline-neutral">&nbsp;</span>
779
+ <span class="cline-any cline-neutral">&nbsp;</span>
780
+ <span class="cline-any cline-neutral">&nbsp;</span>
781
+ <span class="cline-any cline-neutral">&nbsp;</span>
782
+ <span class="cline-any cline-neutral">&nbsp;</span>
783
+ <span class="cline-any cline-yes">3x</span>
784
+ <span class="cline-any cline-neutral">&nbsp;</span>
785
+ <span class="cline-any cline-yes">2x</span>
786
+ <span class="cline-any cline-neutral">&nbsp;</span>
787
+ <span class="cline-any cline-yes">2x</span>
788
+ <span class="cline-any cline-yes">3x</span>
789
+ <span class="cline-any cline-yes">5x</span>
790
+ <span class="cline-any cline-neutral">&nbsp;</span>
791
+ <span class="cline-any cline-neutral">&nbsp;</span>
792
+ <span class="cline-any cline-neutral">&nbsp;</span>
793
+ <span class="cline-any cline-neutral">&nbsp;</span>
794
+ <span class="cline-any cline-neutral">&nbsp;</span>
795
+ <span class="cline-any cline-yes">1x</span>
796
+ <span class="cline-any cline-neutral">&nbsp;</span>
797
+ <span class="cline-any cline-neutral">&nbsp;</span>
798
+ <span class="cline-any cline-yes">4x</span>
799
+ <span class="cline-any cline-neutral">&nbsp;</span>
800
+ <span class="cline-any cline-neutral">&nbsp;</span>
801
+ <span class="cline-any cline-neutral">&nbsp;</span>
802
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import React, { ReactElement, useCallback, useEffect, useRef } from "react";
803
+ import { DataObject, TableHeaderProps } from "../Components/Table/TableProps";
804
+ import type { CustomThemeProps } from "../Theme/themeProps";
805
+ &nbsp;
806
+ &nbsp;
807
+ /**
808
+ * Type-aware, null-safe comparison. Detects numbers and dates; otherwise falls
809
+ * back to a numeric-aware locale string compare. Empty/null values sort last.
810
+ */
811
+ export function compareValues(aRaw: unknown, bRaw: unknown, direction: "asc" | "desc" | "none"): number {
812
+ if (direction === "none") return 0;
813
+ const dir = direction === "asc" ? 1 : -1;
814
+ const a = getStringValue(aRaw);
815
+ const b = getStringValue(bRaw);
816
+ const aEmpty = a === "";
817
+ const bEmpty = b === "";
818
+ if (aEmpty &amp;&amp; bEmpty) return 0;
819
+ if (aEmpty) return 1; // nulls/empties always last
820
+ if (bEmpty) return -1;
821
+ &nbsp;
822
+ const an = Number(a);
823
+ const bn = Number(b);
824
+ if (!Number.isNaN(an) &amp;&amp; !Number.isNaN(bn)) return (an - bn) * dir;
825
+ &nbsp;
826
+ const ad = Date.parse(a);
827
+ const bd = Date.parse(b);
828
+ if (!Number.isNaN(ad) &amp;&amp; !Number.isNaN(bd)) return (ad - bd) * dir;
829
+ &nbsp;
830
+ return a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }) * dir;
831
+ }
832
+ &nbsp;
833
+ export function SortMultiColumnData(
834
+ data: DataObject[],
835
+ sortConfig: {
836
+ column: string | number;
837
+ direction: string;
838
+ }[]
839
+ ) {
840
+ const active = sortConfig.filter((s) =&gt; s.direction !== "none");
841
+ if (!active.length) return data;
842
+ return [...data].sort((a, b) =&gt; {
843
+ for (const { column, direction } of active) {
844
+ const r = compareValues(a[column], b[column], direction as "asc" | "desc");
845
+ if (r !== 0) return r;
846
+ }
847
+ <span class="cstat-no" title="statement not covered" > return 0;</span>
848
+ });
849
+ }
850
+ &nbsp;
851
+ // --- Monday-style group / status colors ------------------------------------
852
+ export type TablePaletteColor = { solid: string; soft: string; text: string };
853
+ &nbsp;
854
+ const withAlpha = (hex: string, aa: string): string =&gt;
855
+ /^#([0-9a-fA-F]{6})$/.test(hex) ? `${hex}${aa}` : <span class="branch-1 cbranch-no" title="branch not covered" >hex;</span>
856
+ &nbsp;
857
+ /** Deterministic, theme-aware color palette for groups + status pills. */
858
+ export function buildTablePalette(theme: CustomThemeProps): TablePaletteColor[] {
859
+ const c = theme?.colors ?? <span class="branch-1 cbranch-no" title="branch not covered" >{};</span>
860
+ const bases: (string | undefined)[] = [
861
+ c.primary?.[500],
862
+ c.semantic?.success?.[500],
863
+ c.semantic?.info?.[500],
864
+ c.semantic?.warning?.[500],
865
+ c.teal?.[500],
866
+ c.blue?.[500],
867
+ c.pink?.[500],
868
+ c.semantic?.error?.[500],
869
+ c.orange?.[500],
870
+ c.purple?.[500],
871
+ ];
872
+ const list = bases.filter(Boolean) as string[];
873
+ const fallback = ["#8B3FC8"];
874
+ return (list.length ? list : fallback).map((solid) =&gt; ({
875
+ solid,
876
+ soft: withAlpha(solid, "22"),
877
+ text: solid,
878
+ }));
879
+ }
880
+ &nbsp;
881
+ const hashKey = (value: string | number): number =&gt; {
882
+ const s = String(value);
883
+ let h = 0;
884
+ for (let i = 0; i &lt; s.length; i++) h = (h * 31 + s.charCodeAt(i)) &gt;&gt;&gt; 0;
885
+ return h;
886
+ };
887
+ &nbsp;
888
+ /** Pick a deterministic palette color for a value, with optional override hex. */
889
+ export function pickTableColor(
890
+ value: string | number,
891
+ palette: TablePaletteColor[],
892
+ override?: string
893
+ ): TablePaletteColor {
894
+ if (override) return { solid: override, soft: withAlpha(override, "22"), text: override };
895
+ if (!palette.length) return { solid: "#8B3FC8", soft: "#8B3FC822", text: "#8B3FC8" };
896
+ return palette[hashKey(value) % palette.length];
897
+ }
898
+ &nbsp;
899
+ export type TableGroup = { value: string | number; label: string; rows: DataObject[] };
900
+ &nbsp;
901
+ /**
902
+ * Partition rows by a column, preserving first-seen group order. The group key is
903
+ * a normalized string so object/array values (e.g. a `user` field that is an object
904
+ * or an array of users) group together by their readable text instead of by object
905
+ * identity.
906
+ */
907
+ export function groupRows(data: DataObject[], groupBy: string | number): TableGroup[] {
908
+ const order: (string | number)[] = [];
909
+ const map = new Map&lt;string | number, DataObject[]&gt;();
910
+ for (const row of data) {
911
+ const text = getStringValue(row[groupBy]);
912
+ const key = text === "" ? "—" : text;
913
+ if (!map.has(key)) {
914
+ map.set(key, []);
915
+ order.push(key);
916
+ }
917
+ map.get(key)!.push(row);
918
+ }
919
+ return order.map((value) =&gt; ({ value, label: String(value), rows: map.get(value)! }));
920
+ }
921
+ &nbsp;
922
+ export const calculateLeftOffset = (
923
+ columns: number[],
924
+ index: number
925
+ ): number =&gt; {
926
+ return columns.slice(0, index).reduce((sum, width) =&gt; sum + width, 0);
927
+ };
928
+ &nbsp;
929
+ const extractTextFromReactNode = (node: React.ReactNode): string =&gt; {
930
+ if (typeof node === "string" || typeof node === "number") {
931
+ return String(node);
932
+ }
933
+ &nbsp;
934
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (Array.isArray(node)) {
935
+ <span class="cstat-no" title="statement not covered" > return node.map(extractTextFromReactNode).join(" ");</span>
936
+ }
937
+ &nbsp;
938
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (React.isValidElement(node)) {
939
+ const element = node as ReactElement;
940
+ return extractTextFromReactNode(element.props.children);
941
+ }
942
+ &nbsp;
943
+ <span class="cstat-no" title="statement not covered" > return "";</span>
944
+ };
945
+ &nbsp;
946
+ /** Best-effort readable text for an entity object (user/relation/option/etc.). */
947
+ const objectToText = (o: Record&lt;string, unknown&gt;): string =&gt; {
948
+ if (typeof o.label === "string" || typeof o.label === "number") return String(o.label);
949
+ if (typeof o.name === "string" || typeof o.name === "number") return String(o.name);
950
+ const first = o.first_name ?? o.firstName;
951
+ const last = o.last_name ?? o.lastName;
952
+ if (typeof first === "string" || typeof last === "string") {
953
+ return `${first ?? <span class="branch-1 cbranch-no" title="branch not covered" >""}</span> ${last ?? <span class="branch-1 cbranch-no" title="branch not covered" >""}</span>`.trim();
954
+ }
955
+ if (typeof o.full_name === "string") return o.full_name;
956
+ if (typeof o.title === "string") return o.title;
957
+ if (typeof o.company_name === "string") return o.company_name;
958
+ if (typeof o.email === "string") return o.email;
959
+ if (typeof o.value === "string" || typeof o.value === "number") return String(o.value);
960
+ return "";
961
+ };
962
+ &nbsp;
963
+ /**
964
+ * Readable string for any cell value. Handles primitives, React elements, entity
965
+ * objects (e.g. `user`: `{ name }` / `{ first_name, last_name }`), and arrays of
966
+ * any of those (e.g. a multi-user field) by joining their texts.
967
+ */
968
+ const getStringValue = (value: unknown): string =&gt; {
969
+ if (value === null || value === undefined) return "";
970
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
971
+ return String(value);
972
+ }
973
+ if (React.isValidElement(value)) {
974
+ return extractTextFromReactNode(value);
975
+ }
976
+ if (Array.isArray(value)) {
977
+ return value.map(getStringValue).filter((s) =&gt; s !== "").join(", ");
978
+ }
979
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (typeof value === "object") {
980
+ return objectToText(value as Record&lt;string, unknown&gt;);
981
+ }
982
+ <span class="cstat-no" title="statement not covered" > return "";</span>
983
+ };
984
+ &nbsp;
985
+ /**
986
+ * When a column has no `node`, raw cell values are rendered; plain objects
987
+ * (e.g. relation/user fields) must not be passed as React children.
988
+ */
989
+ export function normalizeTableCellValue(value: unknown): React.ReactNode {
990
+ if (value === null || value === undefined) return "";
991
+ if (
992
+ typeof value === "string" ||
993
+ typeof value === "number" ||
994
+ typeof value === "boolean"
995
+ ) {
996
+ return value;
997
+ }
998
+ if (React.isValidElement(value as React.ReactElement)) {
999
+ return value as React.ReactElement;
1000
+ }
1001
+ // Objects (relation/user) and arrays (multi-user / multi-select) → readable text.
1002
+ return getStringValue(value);
1003
+ }
1004
+ &nbsp;
1005
+ export const searchAndSortData = (
1006
+ data: DataObject[],
1007
+ searchValues: Record&lt;string, string&gt;
1008
+ ) =&gt; {
1009
+ const filteredData = data.filter((item) =&gt; {
1010
+ return Object.keys(searchValues).every((key) =&gt; {
1011
+ const searchValue = searchValues[key].toLowerCase();
1012
+ const itemValue = getStringValue(item[key]).toLowerCase();
1013
+ return itemValue.includes(searchValue);
1014
+ });
1015
+ });
1016
+ &nbsp;
1017
+ return filteredData.sort((a, b) =&gt; {
1018
+ let aMatchCount = 0;
1019
+ let bMatchCount = 0;
1020
+ &nbsp;
1021
+ Object.keys(searchValues).forEach((key) =&gt; {
1022
+ const searchValue = searchValues[key].toLowerCase();
1023
+ const aValue = getStringValue(a[key]).toLowerCase();
1024
+ const bValue = getStringValue(b[key]).toLowerCase();
1025
+ &nbsp;
1026
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (aValue === searchValue) <span class="cstat-no" title="statement not covered" >aMatchCount++;</span>
1027
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (bValue === searchValue) bMatchCount++;
1028
+ &nbsp;
1029
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (aValue.includes(searchValue)) aMatchCount += 0.5;
1030
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (bValue.includes(searchValue)) bMatchCount += 0.5;
1031
+ });
1032
+ &nbsp;
1033
+ return bMatchCount - aMatchCount;
1034
+ });
1035
+ };
1036
+ &nbsp;
1037
+ export function debounce&lt;T extends (...args: never[]) =&gt; void&gt;(
1038
+ func: T,
1039
+ delay: number
1040
+ ): (...args: Parameters&lt;T&gt;) =&gt; void {
1041
+ let timer: NodeJS.Timeout;
1042
+ return (...args: Parameters&lt;T&gt;) =&gt; {
1043
+ clearTimeout(timer);
1044
+ timer = setTimeout(() =&gt; {
1045
+ func(...args);
1046
+ }, delay);
1047
+ };
1048
+ }
1049
+ &nbsp;
1050
+ export function useDebounce&lt;T extends (...args: never[]) =&gt; void&gt;(
1051
+ callback: T,
1052
+ delay: number
1053
+ ): (...args: Parameters&lt;T&gt;) =&gt; void {
1054
+ const callbackRef = useRef(callback);
1055
+ const timerRef = useRef&lt;ReturnType&lt;typeof setTimeout&gt; | null&gt;(null);
1056
+ &nbsp;
1057
+ useEffect(() =&gt; {
1058
+ callbackRef.current = callback;
1059
+ }, [callback]);
1060
+ &nbsp;
1061
+ const debouncedFn = useCallback(
1062
+ (...args: Parameters&lt;T&gt;) =&gt; {
1063
+ if (timerRef.current) {
1064
+ clearTimeout(timerRef.current);
1065
+ }
1066
+ &nbsp;
1067
+ timerRef.current = setTimeout(() =&gt; {
1068
+ callbackRef.current(...args);
1069
+ }, delay);
1070
+ },
1071
+ [delay]
1072
+ );
1073
+ &nbsp;
1074
+ return debouncedFn;
1075
+ }
1076
+ &nbsp;
1077
+ export const pageSizeCalculation = (records: number) =&gt; {
1078
+ const pageSize = [5, 10];
1079
+ if (records &gt; 100) {
1080
+ return [25, 50, 100];
1081
+ } else if (records &gt; 50) {
1082
+ return [5, 10, 20];
1083
+ }
1084
+ return pageSize;
1085
+ };
1086
+ &nbsp;
1087
+ type TableCellCalculationProps = {
1088
+ isFrozen?: boolean;
1089
+ columnWidths: number[];
1090
+ headerIndex: number;
1091
+ isCheckbox?: boolean;
1092
+ header: TableHeaderProps;
1093
+ row: DataObject;
1094
+ freezedBgColor?: string;
1095
+ index: number;
1096
+ theme: CustomThemeProps;
1097
+ };
1098
+ &nbsp;
1099
+ export const TableCellCalculation = ({
1100
+ isFrozen,
1101
+ columnWidths,
1102
+ headerIndex,
1103
+ isCheckbox,
1104
+ header,
1105
+ row,
1106
+ freezedBgColor,
1107
+ index,
1108
+ theme,
1109
+ }: TableCellCalculationProps) =&gt; {
1110
+ const leftOffset = isFrozen
1111
+ ? calculateLeftOffset(columnWidths, headerIndex) + (isCheckbox ? 50 : 0)
1112
+ : 0;
1113
+ const cellStyles = row.cellStyle as
1114
+ | Record&lt;string | number, { bg?: string; color?: string }&gt;
1115
+ | undefined;
1116
+ const rowStyle = row.rowStyle as { bg?: string; color?: string } | undefined;
1117
+ let cellBgColor = undefined;
1118
+ let cellTextColor = undefined;
1119
+ if (cellStyles?.[header.id]) {
1120
+ cellBgColor =
1121
+ cellStyles[header.id]?.bg ?? <span class="branch-1 cbranch-no" title="branch not covered" >theme.colors.backgroundColor.light;</span>
1122
+ cellTextColor = cellStyles[header.id]?.color ?? <span class="branch-1 cbranch-no" title="branch not covered" >undefined;</span>
1123
+ } else if (isFrozen) {
1124
+ cellBgColor = freezedBgColor ?? undefined;
1125
+ cellTextColor = freezedBgColor ?? undefined;
1126
+ } else if (index % 2 === 1) {
1127
+ cellBgColor = theme.colors.backgroundColor.light;
1128
+ }
1129
+ &nbsp;
1130
+ let rowBgColor = undefined;
1131
+ let rowTextColor = undefined;
1132
+ if (rowStyle) {
1133
+ rowBgColor = rowStyle.bg;
1134
+ rowTextColor = rowStyle.color;
1135
+ }
1136
+ &nbsp;
1137
+ return { leftOffset, cellBgColor, rowBgColor, cellTextColor, rowTextColor };
1138
+ };
1139
+ &nbsp;
1140
+ /**
1141
+ * Filters array of objects by checking all property values against the search query.
1142
+ *
1143
+ * @param data - Array of objects
1144
+ * @param query - Search string
1145
+ * @returns Filtered data
1146
+ */
1147
+ export function globalSearchFilter&lt;T extends Record&lt;string, unknown&gt;&gt;(
1148
+ data: T[],
1149
+ query: string
1150
+ ): T[] {
1151
+ if (!query.trim()) return data;
1152
+ &nbsp;
1153
+ const lowerQuery = query.toLowerCase();
1154
+ &nbsp;
1155
+ return data.filter((item) =&gt;
1156
+ Object.values(item).some((val) =&gt; {
1157
+ if (
1158
+ val === null ||
1159
+ val === undefined ||
1160
+ typeof val === "object" ||
1161
+ typeof val === "function"
1162
+ ) {
1163
+ return false;
1164
+ }
1165
+ &nbsp;
1166
+ return String(val).toLowerCase().includes(lowerQuery);
1167
+ })
1168
+ );
1169
+ }
1170
+ &nbsp;</pre></td></tr></table></pre>
1171
+
1172
+ <div class='push'></div><!-- for sticky footer -->
1173
+ </div><!-- /wrapper -->
1174
+ <div class='footer quiet pad2 space-top1 center small'>
1175
+ Code coverage generated by
1176
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1177
+ at 2026-06-13T07:33:44.377Z
1178
+ </div>
1179
+ <script src="../prettify.js"></script>
1180
+ <script>
1181
+ window.onload = function () {
1182
+ prettyPrint();
1183
+ };
1184
+ </script>
1185
+ <script src="../sorter.js"></script>
1186
+ <script src="../block-navigation.js"></script>
1187
+ </body>
1188
+ </html>
1189
+