@uindow/css 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2026-present Uindow™ (https://uindow.com)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,294 @@
1
+ # @uindow/css - The Smarter CSS Selector Generator
2
+
3
+ <p align="center">
4
+ <a href="https://uindow.com/?ref=github">
5
+ <img src="https://uindow.github.io/img/github-banner-css.png?v=2"/>
6
+ </a>
7
+ </p>
8
+
9
+ Generate one - or many - unique CSS selectors for any DOM element. Clean, human-readable output. A configurable penalty model that ranks results from most semantic to most specific. Built for performance, designed to stay out of your way.
10
+
11
+ Works everywhere JavaScript runs: Node.js, browsers, and any environment with a DOM.
12
+
13
+ <p align="center">
14
+ <a href="https://uindow.github.io/img/uindow-css.gif" target="_blank">
15
+ <img src="https://uindow.github.io/img/uindow-css.gif"/>
16
+ </a>
17
+ </p>
18
+
19
+ ---
20
+
21
+ ## Installation
22
+
23
+ **npm**
24
+
25
+ ```bash
26
+ npm install @uindow/css
27
+ ```
28
+
29
+ ```js
30
+ const { findOne, findAll } = require("@uindow/css");
31
+ ```
32
+
33
+ **Browser (standalone)**
34
+
35
+ ```html
36
+ <script src="https://uindow.github.io/css/selector.js"></script>
37
+ <script>
38
+ const { findOne, findAll } = Uindow_CSS;
39
+ </script>
40
+ ```
41
+
42
+ ---
43
+
44
+ ## Quick start
45
+
46
+ ```js
47
+ const { findOne, findAll } = require("@uindow/css");
48
+
49
+ // The single best selector
50
+ const { selector, penalty } = findOne(document.querySelector(".hero"));
51
+ // → '[data-id="42"] .hero'
52
+
53
+ // Every viable selector, ranked from best to most specific
54
+ const results = findAll(document.querySelector(".hero"), { maxResults: 5 });
55
+ // → [
56
+ // { selector: '[data-id="42"] .hero', penalty: 1.3 },
57
+ // { selector: '.hero', penalty: 1.3 },
58
+ // { selector: 'section [data-id="42"] .hero', penalty: 2.6 },
59
+ // { selector: 'main .hero', penalty: 2.75 },
60
+ // { selector: 'main .hero:nth-of-type(1)', penalty: 4.4 },
61
+ // ]
62
+ ```
63
+
64
+ ---
65
+
66
+ ## Why @uindow/css?
67
+
68
+ Most CSS selector generators treat the problem as a lookup: walk up the DOM, find something unique, done. One selector, take it or leave it.
69
+
70
+ `@uindow/css` treats it as a **search problem**. It explores the space of possible selectors across every ancestor level, scores each candidate against a configurable penalty model, prunes aggressively to stay fast, and surfaces a ranked list of results - so you always get the shortest, most readable, most stable selector first, with fallbacks already computed.
71
+
72
+ ---
73
+
74
+ ## Comparison with `@medv/finder`
75
+
76
+ | Feature | **@uindow/css** | **@medv/finder** |
77
+ |---|---|---|
78
+ | **Custom root element** | ✅ Any `HTMLElement`, `Document`, or `ShadowRoot` | ✅ Supported |
79
+ | **ID filter** | ✅ `idFilter` filter | ✅ `idName` filter |
80
+ | **Tag filter** | ✅ `tagFilter` filter | ✅ `tagName` filter |
81
+ | **Class filter** | ✅ Excludes `is-*`, `has-*`, `js-*`, `css-*` by default | ⚠️ Less opinionated defaults |
82
+ | **Attribute filter** | ✅ Excludes `style`, `width`, `height`, URLs, values ≥ 32 chars by default | ⚠️ Less opinionated defaults |
83
+ | **Search timeout** | ✅ `timeout` with graceful fallback | ⚠️ May quit before an exhaustive search |
84
+ | [**Returns multiple selectors**](#multiple-selectors-ranked-by-quality) | ✅ Up to `maxResults`, ranked by penalty | ❌ Single selector only |
85
+ | [**Per-type penalty tuning**](#fine-grained-penalty-model) | ✅ `idPenalty`, `tagPenalty`, `attrPenalty`, `attrMatchPenalty`, `classPenalty`, `nthOfTypePenalty`, `nthChildPenalty`, `lengthPenaltyThreshold` | ❌ Not configurable |
86
+ | [**Candidate/path caps**](#performance-controls) | ✅ `maxCandidatesPerLevel`, `maxPathsPerLevel`, `maxPathsTotal` | ❌ Not supported |
87
+ | [**Prefix/suffix attribute matching**](#prefix-and-suffix-attribute-matching) | ✅ `[attr^="start"]`, `[attr$="end"]` | ❌ Not supported |
88
+ | [**Human-readable attribute selectors**](#clean-human-readable-output) | ✅ Always emits `[attr="123"]` | ❌ Uses `CSS.escape()` |
89
+ | [**Fuzziness**](#fuzziness) | ✅ Trade exclusivity for shorter selectors (`0%` to `100%`) | ❌ Not supported |
90
+ | [**Effort**](#effort) | ✅ Trade processing time for shorter selectors (`0%` to `100%`) | ❌ Not supported |
91
+ | [**Compound selectors**](#compound-selectors-at-every-level) | ✅ Attempts to merge tag, classes, and attributes at each level: `input.check[type="checkbox"][value="2"]` | ❌ Simple selectors only |
92
+
93
+ ---
94
+
95
+ ## Features
96
+
97
+ ### Multiple selectors, ranked by quality
98
+
99
+ `findAll()` returns up to `maxResults` selectors sorted by ascending penalty - from the most semantic to the most specific. Pick the best one programmatically, or hand the whole list to your users.
100
+
101
+ ```js
102
+ const { findAll } = require("@uindow/css");
103
+
104
+ const results = findAll(el, { maxResults: 10 });
105
+
106
+ results.forEach(({ selector, penalty }) => {
107
+ console.log(`${selector} (penalty: ${penalty})`);
108
+ });
109
+ ```
110
+
111
+ ### Prefix and suffix attribute matching
112
+
113
+ When an exact attribute match would be brittle or unavailable, `@uindow/css` can generate selectors using the CSS `^=` (prefix) and `$=` (suffix) operators. They carry their own separate penalty so they only surface when genuinely useful.
114
+
115
+ ```css
116
+ /* Exact match - always preferred */
117
+ [data-id="42"]
118
+
119
+ /* Prefix match - used when it uniquely identifies the element */
120
+ [data-id^="prod-"]
121
+
122
+ /* Suffix match */
123
+ [data-id$="-active"]
124
+ ```
125
+
126
+ Tune how eagerly these appear with `attrMatchPenalty` (default `1.2`).
127
+
128
+ ### Clean, human-readable output
129
+
130
+ Every selector is emitted in the plain `[attr="value"]` format. No CSS-escaped sequences, no surprises when you read, copy, or paste the result.
131
+
132
+ ```css
133
+ /* ✅ @uindow/css */
134
+ [data-id="123"] .nav-item
135
+
136
+ /* ❌ Other tools */
137
+ [data-id="\31 23"] .nav-item
138
+ ```
139
+
140
+ ### Sensible default filters
141
+
142
+ Unstable and noisy parts of the DOM are excluded before the search begins:
143
+
144
+ - **Attributes** - `style`, `width`, `height`, URL values, and anything over 32 characters are ignored by default.
145
+ - **Classes** - `is-*`, `has-*`, `js-*`, and `css-*` are ignored by default. These are state and behaviour hooks - they change at runtime and make brittle selectors.
146
+ - **IDs** - all IDs are allowed by default. Provide your own `idFilter` to exclude auto-generated or dynamic ones.
147
+
148
+ Every filter is a plain function, so your own rules are one line of code.
149
+
150
+ ### Fine-grained penalty model
151
+
152
+ Each selector type has an independent penalty weight. Lower means it shows up more often in results; higher means it only appears when nothing better is available.
153
+
154
+ | Option | Default | Controls |
155
+ |---|---|---|
156
+ | `idPenalty` | `1` | `#id` selectors |
157
+ | `tagPenalty` | `1.1` | `div`, `span`, … |
158
+ | `attrPenalty` | `1.25` | `[name]`, `[value="1"]` |
159
+ | `attrMatchPenalty` | `1.2` | `[name^="x"]`, `[value$="5"]` |
160
+ | `classPenalty` | `1.3` | `.button`, `.nav-item`, … |
161
+ | `nthOfTypePenalty` | `3` | `div:nth-of-type(2)` |
162
+ | `nthChildPenalty` | `6` | `:nth-child(3)` |
163
+ | `lengthPenaltyThreshold` | `32` | Extra penalty for selectors longer than N chars |
164
+
165
+ ### Performance controls
166
+
167
+ For large or deeply nested DOMs, hard caps keep the search bounded:
168
+
169
+ ```js
170
+ const { findAll } = require("@uindow/css");
171
+
172
+ findAll(el, {
173
+ maxCandidatesPerLevel: 2500, // Candidates evaluated per ancestor level
174
+ maxPathsPerLevel: 50, // Unique paths kept per level
175
+ maxPathsTotal: 1000, // Unique paths across the entire search
176
+ timeout: 1500, // Return best found so far after N ms
177
+ });
178
+ ```
179
+
180
+ ### Fuzziness
181
+
182
+ By default, `@uindow/css` only returns selectors that match the target element exclusively. Set `fuzziness > 0` to allow selectors that match the target *first* while potentially matching other elements too - trading strict uniqueness for shorter, cleaner output.
183
+
184
+ ```js
185
+ findAll(el, { fuzziness: 0 }); // Strict - only exclusive selectors (default)
186
+ findAll(el, { fuzziness: 5 }); // Up to 5% non-exclusive matches allowed
187
+ findAll(el, { fuzziness: 20 }); // Relaxed - prioritise brevity
188
+ findAll(el, { fuzziness: 100 }); // Fuzzy - only non-exclusive (first-match) selectors
189
+ ```
190
+
191
+ ### Effort
192
+
193
+ Controls how much effort is spent optimizing partial results before returning the final list. This setting trades speed for result quality: higher values spend more time exploring candidates before producing the final result set.
194
+
195
+ ```js
196
+ findAll(el, { effort: 0 }); // Low effort - quickly returns the first `maxResults`
197
+ findAll(el, { effort: 50 }); // Medium effort - evaluates 25 × `maxResults` candidates before returning the final results
198
+ findAll(el, { effort: 100 }); // Maximum effort - evaluates 50 × `maxResults` candidates before returning the final results
199
+ ```
200
+
201
+ ### Compound selectors at every level
202
+
203
+ Most CSS selector generators pick a single token per ancestor level - a class, or an attribute, or a tag - and move on. This produces selectors that are either fragile (too generic) or bloated (too many levels deep).
204
+
205
+ `@uindow/css` builds **compound selectors** at each level by default, combining the tag, relevant classes, and attributes into a single, precise token:
206
+
207
+ ```css
208
+ /* ✅ @uindow/css - compound, precise, readable */
209
+ input.check[type="checkbox"][value="2"]
210
+
211
+ /* ❌ Other tools - simple, one token at a time */
212
+ input
213
+ .check
214
+ [type="checkbox"]
215
+ ```
216
+
217
+ The result is selectors that are shorter, more stable, and immediately understandable at a glance.
218
+
219
+ ---
220
+
221
+ ## API
222
+
223
+ ### `findOne(element, options?)`
224
+
225
+ Returns the single best selector for `element`, or throws if none can be generated.
226
+
227
+ ```js
228
+ const { findOne } = require("@uindow/css");
229
+
230
+ const { selector, penalty } = findOne(document.getElementById("main"));
231
+ // → { selector: '#main', penalty: 1 }
232
+ ```
233
+
234
+ ### `findAll(element, options?)`
235
+
236
+ Returns up to `maxResults` selectors sorted by ascending penalty, or throws if none can be generated.
237
+
238
+ ```js
239
+ const { findAll } = require("@uindow/css");
240
+
241
+ const results = findAll(document.getElementById("main"), {
242
+ maxResults: 10,
243
+ });
244
+ ```
245
+
246
+ ---
247
+
248
+ ## Configuration reference
249
+
250
+ All configuration items are optional. Any omitted option falls back to its default.
251
+
252
+ ```js
253
+ const { findAll } = require("@uindow/css");
254
+
255
+ findAll(el, {
256
+ // Scope - nothing above this element appears in any selector
257
+ root: document.querySelector("#app"), // Default: document.documentElement
258
+
259
+ // Filters - return false to exclude a candidate from the search
260
+ idFilter: (name) => !name.startsWith("auto-"),
261
+ tagFilter: (name) => name !== "div",
262
+ classFilter: (name) => !name.startsWith("is-"),
263
+ attrFilter: (name, value) => name.startsWith("data-") && value.length < 32,
264
+
265
+ // Penalties - lower value → type appears more often in results
266
+ idPenalty: 1,
267
+ tagPenalty: 1.1,
268
+ attrPenalty: 1.25,
269
+ attrMatchPenalty: 1.2,
270
+ classPenalty: 1.3,
271
+ nthOfTypePenalty: 3,
272
+ nthChildPenalty: 6,
273
+ lengthPenaltyThreshold: 32,
274
+
275
+ // Performance caps
276
+ maxCandidatesPerLevel: 2500,
277
+ maxPathsPerLevel: 50,
278
+ maxPathsTotal: 1000,
279
+ maxResults: 25,
280
+ timeout: 1500,
281
+
282
+ // Percentage of shorter, first-match selectors
283
+ fuzziness: 0,
284
+
285
+ // Effort spent on optimizing candidates
286
+ effort: 50
287
+ });
288
+ ```
289
+
290
+ ---
291
+
292
+ ## License
293
+
294
+ MIT © 2026 [Uindow™](https://uindow.com)
package/index.js ADDED
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Uindow's CSS Selector Generator
3
+ *
4
+ * @architect Mark Jivko <mark@uindow.com>
5
+ * @copyright © 2026 Uindow™ (https://uindow.com)
6
+ * @license MIT
7
+ *
8
+ * Permission is hereby granted, free of charge, to any person obtaining
9
+ * a copy of this software and associated documentation files
10
+ * (the "Software"), to deal in the Software without restriction,
11
+ * including without limitation the rights to use, copy, modify, merge,
12
+ * publish, distribute, sublicense, and/or sell copies of the Software,
13
+ * and to permit persons to whom the Software is furnished to do so,
14
+ * subject to the following conditions:
15
+ *
16
+ * The above copyright notice and this permission notice shall be
17
+ * included in all copies or substantial portions of the Software.
18
+ *
19
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
23
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
24
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
25
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26
+ */
27
+ "use strict";var E=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var W=Object.prototype.hasOwnProperty;var v=f=>{throw TypeError(f)};var C=(f,e)=>E(f,"name",{value:e,configurable:!0});var q=(f,e)=>{for(var t in e)E(f,t,{get:e[t],enumerable:!0})},B=(f,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of V(e))!W.call(f,a)&&a!==t&&E(f,a,{get:()=>e[a],enumerable:!(n=I(e,a))||n.enumerable});return f};var J=f=>B(E({},"__esModule",{value:!0}),f);var K=(f,e,t)=>e.has(f)||v("Cannot "+t);var A=(f,e,t)=>e.has(f)?v("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(f):e.set(f,t);var h=(f,e,t)=>(K(f,e,"access private method"),t);var Y={};q(Y,{findAll:()=>X,findOne:()=>Q});module.exports=J(Y);var i,D,j,F,G,R,U,$,N;const c=class c{static findOne(e,t={}){return(typeof t!="object"||t===null)&&(t={}),c.findAll(e,{...t,maxResults:1})[0]}static findAll(e,t={}){var b,L,o,u,m,y,P;if(Node.ELEMENT_NODE!==e?.nodeType)throw new Error("Cannot generate a CSS selector for this element");if(e.tagName.toLowerCase()==="html")return[{selector:"html",penalty:0}];const n=h(b=c,i,D).call(b,t),a=performance.now(),r=(()=>{const s=e.getRootNode?.();return s?.constructor?.name==="ShadowRoot"?s:Node.DOCUMENT_NODE===n.root.nodeType?n.root:n.root.ownerDocument??n.root})(),l={},S=[];for(const{candidate:s,level:d}of h(L=c,i,j).call(L,e,n,r)){if(performance.now()-a>n.timeout)break;if(typeof l[d]>"u"&&(l[d]=0),!(l[d]>=n.maxPathsPerLevel)&&h(o=c,i,N).call(o,e,n,s,r)&&(S.push({path:s,penalty:h(u=c,i,U).call(u,s,n)}),l[d]++,S.length>=n.maxPathsTotal))break}if(S.length===0){const s=(()=>{var k,z;const d=[];let M=0,x=e;for(;x&&x!==r;){const H=x.tagName.toLowerCase(),O=h(k=c,i,$).call(k,x,H);if(O===-1)return[];d.push({compound:`${H}:nth-of-type(${O})`,penalty:n.nthOfTypePenalty,level:M}),x=x.parentElement,M++}return h(z=c,i,N).call(z,e,n,d,r)?d:[]})();if(!s.length)throw new Error("No fallback CSS selector was not found");return[{selector:h(m=c,i,R).call(m,s),penalty:h(y=c,i,U).call(y,s,n)}]}S.sort((s,d)=>s.penalty-d.penalty);const p=[],g=new Set,w=C(s=>{var M,x;const d=h(M=c,i,R).call(M,s);!d||g.has(d)||(g.add(d),p.push({selector:d,penalty:h(x=c,i,U).call(x,s,n)}))},"append"),_=n.maxResults*Math.round(1+n.effort/100*49);t:for(const{path:s}of S){for(const d of h(P=c,i,F).call(P,s,e,n,r))if(w(d),p.length>=_)break t;w(s)}return p.sort((s,d)=>s.penalty-d.penalty),p.slice(0,n.maxResults)}};i=new WeakSet,D=C(function(e={}){(typeof e!="object"||e===null)&&(e={});const t={};t.root=e.root instanceof HTMLElement?e.root:document.documentElement,t.idFilter=typeof e.idFilter=="function"?e.idFilter:()=>!0,t.tagFilter=typeof e.tagFilter=="function"?e.tagFilter:()=>!0,t.classFilter=typeof e.classFilter=="function"?e.classFilter:r=>!r.match(/^(is-|has-|js-|css-)/),t.attrFilter=typeof e.attrFilter=="function"?e.attrFilter:(r,l)=>!/(?:width|height|style)$/i.test(r)&&l.length<=32&&!/^(?:\w+:)?\/\/?/i.test(l);const n={lengthPenaltyThreshold:32,maxCandidatesPerLevel:2500,maxPathsPerLevel:50,maxPathsTotal:1e3,maxResults:25,fuzziness:0,effort:50,timeout:1500};for(const r of Object.keys(n))t[r]=Number.isInteger(e[r])?Math.abs(e[r]):n[r];t.fuzziness>100&&(t.fuzziness=100),t.effort>100&&(t.effort=100),t.lengthPenaltyThreshold<1&&(t.lengthPenaltyThreshold=1),t.maxResults<1&&(t.maxResults=1),t.maxPathsTotal<t.maxResults&&(t.maxPathsTotal=t.maxResults),t.maxPathsPerLevel<t.maxResults&&(t.maxPathsPerLevel=t.maxResults),t.maxCandidatesPerLevel<t.maxPathsPerLevel&&(t.maxCandidatesPerLevel=t.maxPathsPerLevel);const a={idPenalty:1,tagPenalty:1.1,classPenalty:1.3,attrPenalty:1.25,attrMatchPenalty:1.2,nthOfTypePenalty:3,nthChildPenalty:6};for(const r of Object.keys(a))t[r]=Number.isFinite(e[r])?Math.abs(e[r]):a[r];return t},"#config"),j=C(function*(e,t,n){var p;let a=e,r=0;function*l(g,w=[],_={count:0}){if(!(_.count>=t.maxCandidatesPerLevel)){if(!g.length){_.count++,yield w;return}for(const b of g[0]){if(_.count>=t.maxCandidatesPerLevel)return;yield*l(g.slice(1),w.concat(b),_)}}}C(l,"combine");const S=[];for(;a&&a!==n;){S.push(h(p=c,i,G).call(p,a,t,r));const g=[...l(S)];g.sort((w,_)=>{var b,L;return h(b=c,i,U).call(b,w,t)-h(L=c,i,U).call(L,_,t)});for(const w of g)yield{candidate:w,level:r};a=a.parentElement,r++}},"#find"),F=C(function*(e,t,n,a){var r,l;if(!(e.length<=2))for(let S=1;S<e.length-1;S++){const p=[...e];p.splice(S,1),h(r=c,i,N).call(r,t,n,p,a)&&(yield*h(l=c,i,F).call(l,p,t,n,a),yield p)}},"#optimize"),G=C(function(e,t,n=0){var b,L;const a=[],r=e.getAttribute("id");r&&t.idFilter(r)&&a.push({compound:"#"+CSS.escape(r),penalty:t.idPenalty,level:n});const l=e.tagName.toLowerCase();if(t.tagFilter(l)){a.push({compound:l,penalty:t.tagPenalty,level:n});const o=h(b=c,i,$).call(b,e,l);o!==-1&&a.push({compound:`${l}:nth-of-type(${o})`,penalty:t.nthOfTypePenalty,level:n});const u=h(L=c,i,$).call(L,e);u!==-1&&a.push({compound:`:nth-child(${u})`,penalty:t.nthChildPenalty,level:n})}const S=C((o,u)=>{if(!Array.isArray(o)||o.length<2||!Number.isFinite(u))return;const m=Math.min(8,o.length);for(let y=0;y<m;y++){a.push({compound:`${l}${o[y]}`,penalty:u,level:n});for(let P=y+1;P<m;P++){const s=`${o[y]}${o[P]}`;a.push({compound:s,penalty:u,level:n}),a.push({compound:`${l}${s}`,penalty:u,level:n})}}},"mergeTwo"),p=C((o,u)=>{if(!Array.isArray(o)||o.length<3||!Number.isFinite(u))return;const m=Math.min(8,o.length);for(let y=0;y<m;y++)for(let P=y+1;P<m;P++)for(let s=P+1;s<m;s++){const d=`${o[y]}${o[P]}${o[s]}`;a.push({compound:d,penalty:u,level:n}),a.push({compound:`${l}${d}`,penalty:u,level:n})}},"mergeThree"),g=[];for(let o=0;o<e.classList.length;o++)if(t.classFilter(e.classList[o])){const u=`.${CSS.escape(e.classList[o])}`;g.push(u),a.push({compound:u,penalty:t.classPenalty,level:n})}S(g,t.classPenalty);const w=[],_=C(o=>o.replace(/\\/g,"\\\\").replace(/"/g,'\\"'),"safeValue");for(let o=0;o<e.attributes.length;o++){const u=e.attributes[o].name.toLowerCase(),m=`${e.attributes[o].value}`;if(!(u==="id"||u==="class")&&t.attrFilter(u,m)){const y=`[${CSS.escape(u)}${m.length?`="${_(m)}"`:""}]`;w.push(y),a.push({compound:y,penalty:t.attrPenalty,level:n});const P=m.match(/^(\w{2,12})/g);if(P&&P[0].length<m.length){const d=`[${CSS.escape(u)}^="${_(P[0])}"]`;a.push({compound:d,penalty:t.attrMatchPenalty,level:n})}const s=m.match(/(\w{2,12})$/g);if(s&&s[0].length<m.length){const d=`[${CSS.escape(u)}$="${_(s[0])}"]`;a.push({compound:d,penalty:t.attrMatchPenalty,level:n})}}}return S(w,t.attrPenalty),p([...g.slice(0,4),...w.slice(0,4)],Math.min(t.attrPenalty,t.classPenalty)),a},"#path"),R=C(function(e){if(!e.length)return"";let t=e[0],n=t.compound;for(let a=1;a<e.length;a++){const r=(e[a].level??0)-1===t.level;n=`${e[a].compound} ${r?"> ":""}${n}`,t=e[a]}return n},"#selector"),U=C(function(e,t){const n=e.reduce((r,l)=>r+l.compound.length,0),a=t.lengthPenaltyThreshold>0&&n>t.lengthPenaltyThreshold?n/t.lengthPenaltyThreshold:1;return Math.round(1e3*e.reduce((r,l)=>r*l.penalty*1,1)*a)/1e3},"#penalty"),$=C(function(e,t){if(!e.parentNode)return-1;let n=e.parentNode.firstChild;if(!n)return-1;let a=0;for(;n&&(Node.ELEMENT_NODE===n.nodeType&&(typeof t!="string"||n.tagName.toLowerCase()===t)&&a++,n!==e);)n=n.nextSibling;return a},"#indexOf"),N=C(function(e,t,n,a){var r;try{const l=a.querySelectorAll(h(r=c,i,R).call(r,n));return t.fuzziness>=100||t.fuzziness>0&&Math.floor(Math.random()*100)<t.fuzziness?l[0]===e:l.length===1}catch{}return!1},"#matches"),A(c,i),C(c,"Uindow_CSS");let T=c;const Q=T.findOne.bind(T),X=T.findAll.bind(T);0&&(module.exports={findAll,findOne});
28
+ //# sourceMappingURL=index.js.map
package/index.js.map ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["src/index.ts"],
4
+ "mappings": "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",
5
+ "names": ["index_exports", "__export", "findAll", "findOne", "__toCommonJS", "_Uindow_CSS_static", "config_fn", "find_fn", "optimize_fn", "path_fn", "selector_fn", "penalty_fn", "indexOf_fn", "matches_fn", "_Uindow_CSS", "element", "options", "_a", "_b", "_c", "_d", "_e", "_f", "_g", "config", "__privateMethod", "startTime", "root", "shadowRoot", "pathsPerLevel", "candidates", "candidate", "level", "fallbackPath", "path", "current", "tag", "idxOfType", "a", "b", "results", "selectors", "append", "__name", "selector", "extendedMaxResults", "treatRaw", "optimized", "n", "v", "integers", "key", "floats", "curr", "combine", "paths", "counter", "node", "pathList", "index", "shorter", "elementId", "nthIdx", "mergeTwo", "items", "penalty", "end", "i", "j", "mergeThree", "k", "classSelectors", "attrSelectors", "safeValue", "val", "attrName", "attrValue", "startWord", "startSelector", "endWord", "endSelector", "isParent", "length", "acc", "pLength", "filterTag", "child", "domElements", "__privateAdd", "Uindow_CSS", "findOne", "findAll"]
6
+ }
package/index.mjs ADDED
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Uindow's CSS Selector Generator
3
+ *
4
+ * @architect Mark Jivko <mark@uindow.com>
5
+ * @copyright © 2026 Uindow™ (https://uindow.com)
6
+ * @license MIT
7
+ *
8
+ * Permission is hereby granted, free of charge, to any person obtaining
9
+ * a copy of this software and associated documentation files
10
+ * (the "Software"), to deal in the Software without restriction,
11
+ * including without limitation the rights to use, copy, modify, merge,
12
+ * publish, distribute, sublicense, and/or sell copies of the Software,
13
+ * and to permit persons to whom the Software is furnished to do so,
14
+ * subject to the following conditions:
15
+ *
16
+ * The above copyright notice and this permission notice shall be
17
+ * included in all copies or substantial portions of the Software.
18
+ *
19
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
23
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
24
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
25
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26
+ */
27
+ var G=Object.defineProperty;var O=_=>{throw TypeError(_)};var P=(_,e)=>G(_,"name",{value:e,configurable:!0});var I=(_,e,t)=>e.has(_)||O("Cannot "+t);var v=(_,e,t)=>e.has(_)?O("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(_):e.set(_,t);var h=(_,e,t)=>(I(_,e,"access private method"),t);var i,A,D,N,j,E,U,R,$;const c=class c{static findOne(e,t={}){return(typeof t!="object"||t===null)&&(t={}),c.findAll(e,{...t,maxResults:1})[0]}static findAll(e,t={}){var b,L,o,u,f,S,y;if(Node.ELEMENT_NODE!==e?.nodeType)throw new Error("Cannot generate a CSS selector for this element");if(e.tagName.toLowerCase()==="html")return[{selector:"html",penalty:0}];const n=h(b=c,i,A).call(b,t),a=performance.now(),r=(()=>{const s=e.getRootNode?.();return s?.constructor?.name==="ShadowRoot"?s:Node.DOCUMENT_NODE===n.root.nodeType?n.root:n.root.ownerDocument??n.root})(),l={},m=[];for(const{candidate:s,level:d}of h(L=c,i,D).call(L,e,n,r)){if(performance.now()-a>n.timeout)break;if(typeof l[d]>"u"&&(l[d]=0),!(l[d]>=n.maxPathsPerLevel)&&h(o=c,i,$).call(o,e,n,s,r)&&(m.push({path:s,penalty:h(u=c,i,U).call(u,s,n)}),l[d]++,m.length>=n.maxPathsTotal))break}if(m.length===0){const s=(()=>{var F,k;const d=[];let M=0,x=e;for(;x&&x!==r;){const z=x.tagName.toLowerCase(),H=h(F=c,i,R).call(F,x,z);if(H===-1)return[];d.push({compound:`${z}:nth-of-type(${H})`,penalty:n.nthOfTypePenalty,level:M}),x=x.parentElement,M++}return h(k=c,i,$).call(k,e,n,d,r)?d:[]})();if(!s.length)throw new Error("No fallback CSS selector was not found");return[{selector:h(f=c,i,E).call(f,s),penalty:h(S=c,i,U).call(S,s,n)}]}m.sort((s,d)=>s.penalty-d.penalty);const C=[],p=new Set,g=P(s=>{var M,x;const d=h(M=c,i,E).call(M,s);!d||p.has(d)||(p.add(d),C.push({selector:d,penalty:h(x=c,i,U).call(x,s,n)}))},"append"),w=n.maxResults*Math.round(1+n.effort/100*49);t:for(const{path:s}of m){for(const d of h(y=c,i,N).call(y,s,e,n,r))if(g(d),C.length>=w)break t;g(s)}return C.sort((s,d)=>s.penalty-d.penalty),C.slice(0,n.maxResults)}};i=new WeakSet,A=P(function(e={}){(typeof e!="object"||e===null)&&(e={});const t={};t.root=e.root instanceof HTMLElement?e.root:document.documentElement,t.idFilter=typeof e.idFilter=="function"?e.idFilter:()=>!0,t.tagFilter=typeof e.tagFilter=="function"?e.tagFilter:()=>!0,t.classFilter=typeof e.classFilter=="function"?e.classFilter:r=>!r.match(/^(is-|has-|js-|css-)/),t.attrFilter=typeof e.attrFilter=="function"?e.attrFilter:(r,l)=>!/(?:width|height|style)$/i.test(r)&&l.length<=32&&!/^(?:\w+:)?\/\/?/i.test(l);const n={lengthPenaltyThreshold:32,maxCandidatesPerLevel:2500,maxPathsPerLevel:50,maxPathsTotal:1e3,maxResults:25,fuzziness:0,effort:50,timeout:1500};for(const r of Object.keys(n))t[r]=Number.isInteger(e[r])?Math.abs(e[r]):n[r];t.fuzziness>100&&(t.fuzziness=100),t.effort>100&&(t.effort=100),t.lengthPenaltyThreshold<1&&(t.lengthPenaltyThreshold=1),t.maxResults<1&&(t.maxResults=1),t.maxPathsTotal<t.maxResults&&(t.maxPathsTotal=t.maxResults),t.maxPathsPerLevel<t.maxResults&&(t.maxPathsPerLevel=t.maxResults),t.maxCandidatesPerLevel<t.maxPathsPerLevel&&(t.maxCandidatesPerLevel=t.maxPathsPerLevel);const a={idPenalty:1,tagPenalty:1.1,classPenalty:1.3,attrPenalty:1.25,attrMatchPenalty:1.2,nthOfTypePenalty:3,nthChildPenalty:6};for(const r of Object.keys(a))t[r]=Number.isFinite(e[r])?Math.abs(e[r]):a[r];return t},"#config"),D=P(function*(e,t,n){var C;let a=e,r=0;function*l(p,g=[],w={count:0}){if(!(w.count>=t.maxCandidatesPerLevel)){if(!p.length){w.count++,yield g;return}for(const b of p[0]){if(w.count>=t.maxCandidatesPerLevel)return;yield*l(p.slice(1),g.concat(b),w)}}}P(l,"combine");const m=[];for(;a&&a!==n;){m.push(h(C=c,i,j).call(C,a,t,r));const p=[...l(m)];p.sort((g,w)=>{var b,L;return h(b=c,i,U).call(b,g,t)-h(L=c,i,U).call(L,w,t)});for(const g of p)yield{candidate:g,level:r};a=a.parentElement,r++}},"#find"),N=P(function*(e,t,n,a){var r,l;if(!(e.length<=2))for(let m=1;m<e.length-1;m++){const C=[...e];C.splice(m,1),h(r=c,i,$).call(r,t,n,C,a)&&(yield*h(l=c,i,N).call(l,C,t,n,a),yield C)}},"#optimize"),j=P(function(e,t,n=0){var b,L;const a=[],r=e.getAttribute("id");r&&t.idFilter(r)&&a.push({compound:"#"+CSS.escape(r),penalty:t.idPenalty,level:n});const l=e.tagName.toLowerCase();if(t.tagFilter(l)){a.push({compound:l,penalty:t.tagPenalty,level:n});const o=h(b=c,i,R).call(b,e,l);o!==-1&&a.push({compound:`${l}:nth-of-type(${o})`,penalty:t.nthOfTypePenalty,level:n});const u=h(L=c,i,R).call(L,e);u!==-1&&a.push({compound:`:nth-child(${u})`,penalty:t.nthChildPenalty,level:n})}const m=P((o,u)=>{if(!Array.isArray(o)||o.length<2||!Number.isFinite(u))return;const f=Math.min(8,o.length);for(let S=0;S<f;S++){a.push({compound:`${l}${o[S]}`,penalty:u,level:n});for(let y=S+1;y<f;y++){const s=`${o[S]}${o[y]}`;a.push({compound:s,penalty:u,level:n}),a.push({compound:`${l}${s}`,penalty:u,level:n})}}},"mergeTwo"),C=P((o,u)=>{if(!Array.isArray(o)||o.length<3||!Number.isFinite(u))return;const f=Math.min(8,o.length);for(let S=0;S<f;S++)for(let y=S+1;y<f;y++)for(let s=y+1;s<f;s++){const d=`${o[S]}${o[y]}${o[s]}`;a.push({compound:d,penalty:u,level:n}),a.push({compound:`${l}${d}`,penalty:u,level:n})}},"mergeThree"),p=[];for(let o=0;o<e.classList.length;o++)if(t.classFilter(e.classList[o])){const u=`.${CSS.escape(e.classList[o])}`;p.push(u),a.push({compound:u,penalty:t.classPenalty,level:n})}m(p,t.classPenalty);const g=[],w=P(o=>o.replace(/\\/g,"\\\\").replace(/"/g,'\\"'),"safeValue");for(let o=0;o<e.attributes.length;o++){const u=e.attributes[o].name.toLowerCase(),f=`${e.attributes[o].value}`;if(!(u==="id"||u==="class")&&t.attrFilter(u,f)){const S=`[${CSS.escape(u)}${f.length?`="${w(f)}"`:""}]`;g.push(S),a.push({compound:S,penalty:t.attrPenalty,level:n});const y=f.match(/^(\w{2,12})/g);if(y&&y[0].length<f.length){const d=`[${CSS.escape(u)}^="${w(y[0])}"]`;a.push({compound:d,penalty:t.attrMatchPenalty,level:n})}const s=f.match(/(\w{2,12})$/g);if(s&&s[0].length<f.length){const d=`[${CSS.escape(u)}$="${w(s[0])}"]`;a.push({compound:d,penalty:t.attrMatchPenalty,level:n})}}}return m(g,t.attrPenalty),C([...p.slice(0,4),...g.slice(0,4)],Math.min(t.attrPenalty,t.classPenalty)),a},"#path"),E=P(function(e){if(!e.length)return"";let t=e[0],n=t.compound;for(let a=1;a<e.length;a++){const r=(e[a].level??0)-1===t.level;n=`${e[a].compound} ${r?"> ":""}${n}`,t=e[a]}return n},"#selector"),U=P(function(e,t){const n=e.reduce((r,l)=>r+l.compound.length,0),a=t.lengthPenaltyThreshold>0&&n>t.lengthPenaltyThreshold?n/t.lengthPenaltyThreshold:1;return Math.round(1e3*e.reduce((r,l)=>r*l.penalty*1,1)*a)/1e3},"#penalty"),R=P(function(e,t){if(!e.parentNode)return-1;let n=e.parentNode.firstChild;if(!n)return-1;let a=0;for(;n&&(Node.ELEMENT_NODE===n.nodeType&&(typeof t!="string"||n.tagName.toLowerCase()===t)&&a++,n!==e);)n=n.nextSibling;return a},"#indexOf"),$=P(function(e,t,n,a){var r;try{const l=a.querySelectorAll(h(r=c,i,E).call(r,n));return t.fuzziness>=100||t.fuzziness>0&&Math.floor(Math.random()*100)<t.fuzziness?l[0]===e:l.length===1}catch{}return!1},"#matches"),v(c,i),P(c,"Uindow_CSS");let T=c;const W=T.findOne.bind(T),q=T.findAll.bind(T);export{q as findAll,W as findOne};
28
+ //# sourceMappingURL=index.mjs.map
package/index.mjs.map ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["src/index.ts"],
4
+ "mappings": "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",
5
+ "names": ["_Uindow_CSS_static", "config_fn", "find_fn", "optimize_fn", "path_fn", "selector_fn", "penalty_fn", "indexOf_fn", "matches_fn", "_Uindow_CSS", "element", "options", "_a", "_b", "_c", "_d", "_e", "_f", "_g", "config", "__privateMethod", "startTime", "root", "shadowRoot", "pathsPerLevel", "candidates", "candidate", "level", "fallbackPath", "path", "current", "tag", "idxOfType", "a", "b", "results", "selectors", "append", "__name", "selector", "extendedMaxResults", "treatRaw", "optimized", "n", "v", "integers", "key", "floats", "curr", "combine", "paths", "counter", "node", "pathList", "index", "shorter", "elementId", "nthIdx", "mergeTwo", "items", "penalty", "end", "i", "j", "mergeThree", "k", "classSelectors", "attrSelectors", "safeValue", "val", "attrName", "attrValue", "startWord", "startSelector", "endWord", "endSelector", "isParent", "length", "acc", "pLength", "filterTag", "child", "domElements", "__privateAdd", "Uindow_CSS", "findOne", "findAll"]
6
+ }
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@uindow/css",
3
+ "version": "1.0.1",
4
+ "description": "CSS Selector Generator",
5
+ "main": "index.js",
6
+ "module": "index.mjs",
7
+ "types": "types/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "require": "./index.js",
11
+ "import": "./index.mjs"
12
+ }
13
+ },
14
+ "files": [
15
+ "index.js",
16
+ "index.js.map",
17
+ "index.mjs",
18
+ "index.mjs.map",
19
+ "types/index.d.ts"
20
+ ],
21
+ "license": "MIT",
22
+ "author": "Mark Jivko <mark@uindow.com> (https://uindow.com)",
23
+ "homepage": "https://uindow.com",
24
+ "keywords": [
25
+ "css",
26
+ "uindow",
27
+ "selector",
28
+ "generator",
29
+ "css-selector",
30
+ "dom-selector",
31
+ "css-selector-generator",
32
+ "dom-selector-generator"
33
+ ],
34
+ "scripts": {
35
+ "format": "prettier --write \"**/*.{js,cjs,ts}\"",
36
+ "lint": "eslint --fix --cache \"src/**/*.ts\"",
37
+ "build": "npm run lint && tsc && npm run format && node ./tools/build.cjs"
38
+ },
39
+ "devDependencies": {
40
+ "@typescript-eslint/eslint-plugin": "8.60.0",
41
+ "esbuild": "0.25.9",
42
+ "eslint": "8.57.1",
43
+ "eslint-config-prettier": "8.10.0",
44
+ "eslint-plugin-prettier": "4.2.1",
45
+ "prettier": "2.8.8",
46
+ "typescript": "6.0.3"
47
+ },
48
+ "repository": {
49
+ "type": "git",
50
+ "url": "git+https://github.com/uindow/css.git"
51
+ },
52
+ "publishConfig": {
53
+ "access": "public"
54
+ }
55
+ }
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Uindow's CSS Selector Generator
3
+ *
4
+ * @architect Mark Jivko <mark@uindow.com>
5
+ * @copyright © 2026-present Uindow™ (https://uindow.com)
6
+ * @license MIT
7
+ *
8
+ * Permission is hereby granted, free of charge, to any person obtaining
9
+ * a copy of this software and associated documentation files
10
+ * (the "Software"), to deal in the Software without restriction,
11
+ * including without limitation the rights to use, copy, modify, merge,
12
+ * publish, distribute, sublicense, and/or sell copies of the Software,
13
+ * and to permit persons to whom the Software is furnished to do so,
14
+ * subject to the following conditions:
15
+ *
16
+ * The above copyright notice and this permission notice shall be
17
+ * included in all copies or substantial portions of the Software.
18
+ *
19
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
23
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
24
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
25
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26
+ */
27
+ /**
28
+ * Configuration options for the CSS selector generator
29
+ */
30
+ export interface Uindow_CSS_Config {
31
+ /**
32
+ * The root element to search from. Selectors will be built relative to this
33
+ * element; nothing above it will appear in any generated selector.
34
+ *
35
+ * @default document.documentElement
36
+ */
37
+ root: HTMLElement | Document;
38
+ /**
39
+ * Function that decides whether an HTML ID attribute may be used in a selector.
40
+ * Defaults to allowing all IDs.
41
+ */
42
+ idFilter: (name: string) => boolean;
43
+ /**
44
+ * Penalty applied to id selectors.
45
+ * Example: `#id`
46
+ *
47
+ * A lower value tends to yield more ID-based CSS selectors.
48
+ *
49
+ * @default 1
50
+ */
51
+ idPenalty: number;
52
+ /**
53
+ * Function that decides whether an HTML tag name may be used in a selector.
54
+ * Defaults to allowing all tags.
55
+ */
56
+ tagFilter: (name: string) => boolean;
57
+ /**
58
+ * Penalty applied to tag selectors.
59
+ * Example: `div`
60
+ *
61
+ * A lower value tends to yield more tag-based CSS selectors.
62
+ *
63
+ * @default 1.1
64
+ */
65
+ tagPenalty: number;
66
+ /**
67
+ * Function that decides whether a CSS class name may be used in a selector.
68
+ * Defaults to disallowing `is-*|has-*|js-*|css-*` classes.
69
+ */
70
+ classFilter: (name: string) => boolean;
71
+ /**
72
+ * Penalty applied to class name selectors.
73
+ * Example: `.button`
74
+ *
75
+ * A lower value tends to yield more class-based CSS selectors.
76
+ *
77
+ * @default 1.3
78
+ */
79
+ classPenalty: number;
80
+ /**
81
+ * Function that decides whether an attribute `(name, value)` pair may be used
82
+ * in a selector. Defaults to allowing any attribute except `*style|*width|*height`
83
+ * that is shorter than 32 characters, and not a URL.
84
+ */
85
+ attrFilter: (name: string, value: string) => boolean;
86
+ /**
87
+ * Penalty applied to attribute selectors.
88
+ * Example: `[name]`, `[value="1"]`
89
+ *
90
+ * A lower value tends to yield more attribute-based CSS selectors.
91
+ *
92
+ * @default 1.25
93
+ */
94
+ attrPenalty: number;
95
+ /**
96
+ * Penalty applied to prefix-matched and suffix-matched attribute selectors.
97
+ * Example prefix-matched attribute selector: `[name^="a"]`
98
+ * Example suffix-matched attribute selector: `[name$="z"]`
99
+ *
100
+ * A lower value tends to yield more CSS selectors that contain
101
+ * prefix-matched and suffix-matched attribute selectors.
102
+ *
103
+ * @default 1.2
104
+ */
105
+ attrMatchPenalty: number;
106
+ /**
107
+ * Penalty applied to nth-of-type selectors.
108
+ * Example: `div:nth-of-type(1)`
109
+ *
110
+ * A lower value tends to yield more nth-of-type CSS selectors.
111
+ *
112
+ * @default 3
113
+ */
114
+ nthOfTypePenalty: number;
115
+ /**
116
+ * Penalty applied to nth-child selectors.
117
+ * Example: `:nth-child(1)`
118
+ *
119
+ * A lower value tends to yield more nth-child CSS selectors.
120
+ *
121
+ * @default 6
122
+ */
123
+ nthChildPenalty: number;
124
+ /**
125
+ * Apply a penalty to CSS selectors whose length exceeds this number of characters.
126
+ *
127
+ * A lower value tends to yield shorter CSS selectors.
128
+ * Must be greater than or equal to 1.
129
+ *
130
+ * @default 32
131
+ */
132
+ lengthPenaltyThreshold: number;
133
+ /**
134
+ * Hard cap on the number of candidates yielded per level.
135
+ * Useful for very deep or very wide DOMs where the search space is large.
136
+ *
137
+ * Must be greater than or equal to `maxPathsPerLevel`.
138
+ *
139
+ * @default 2500
140
+ */
141
+ maxCandidatesPerLevel: number;
142
+ /**
143
+ * Hard cap on the number of unique paths yielded per level.
144
+ * Useful for very deep or very wide DOMs where the search space is large.
145
+ *
146
+ * Must be greater than or equal to `maxResults`.
147
+ *
148
+ * @default 50
149
+ */
150
+ maxPathsPerLevel: number;
151
+ /**
152
+ * Hard cap on the number of unique paths yielded in total.
153
+ * Useful for very deep or very wide DOMs where the search space is large.
154
+ *
155
+ * Must be greater than or equal to `maxResults`.
156
+ *
157
+ * @default 1000
158
+ */
159
+ maxPathsTotal: number;
160
+ /**
161
+ * Maximum number of optimized selectors to return, sorted by increasing penalty.
162
+ *
163
+ * Must be greater than or equal to 1.
164
+ *
165
+ * @default 25
166
+ */
167
+ maxResults: number;
168
+ /**
169
+ * Trade exclusivity for shorter selectors.
170
+ * Fuzziness defines the percentage of CSS selectors that match the target element first,
171
+ * while potentially also matching additional elements on the page.
172
+ * Set to `0` to ensure CSS selectors match the target element exclusively.
173
+ * Must be a positive integer between `0` and `100`.
174
+ *
175
+ * A higher value tends to yield shorter CSS selectors.
176
+ *
177
+ * @default 0
178
+ */
179
+ fuzziness: number;
180
+ /**
181
+ * Trade processing time for shorter selectors.
182
+ * Spend more time optimizing candidate selectors for shorter and more desirable paths.
183
+ * Must be a positive integer between `0` and `100`.
184
+ *
185
+ * A higher value tends to yield shorter CSS selectors at the cost of extra processing time.
186
+ *
187
+ * @default 50
188
+ */
189
+ effort: number;
190
+ /**
191
+ * Maximum time in milliseconds to spend searching before giving up and
192
+ * returning however many results have been found so far, or the nth-of-type fallback
193
+ * if none were found.
194
+ *
195
+ * An small additional delay will be incurred after the search, during the
196
+ * CSS path optimization phase.
197
+ *
198
+ * @default 1500
199
+ */
200
+ timeout: number;
201
+ }
202
+ /**
203
+ * CSS selector result
204
+ */
205
+ export interface Uindow_CSS_Result {
206
+ /**
207
+ * Optimized CSS selector
208
+ */
209
+ selector: string;
210
+ /**
211
+ * CSS selector penalty (the lower, the better)
212
+ */
213
+ penalty: number;
214
+ }
215
+ export declare const findOne: (element: HTMLElement, options?: Partial<Uindow_CSS_Config>) => Uindow_CSS_Result;
216
+ export declare const findAll: (element: HTMLElement, options?: Partial<Uindow_CSS_Config>) => Uindow_CSS_Result[];