htmx.org 4.0.0-alpha1 → 4.0.0-alpha3

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.
@@ -0,0 +1,624 @@
1
+ htmxLive = (()=>{
2
+
3
+ class HtmxLive {
4
+ #mutationObserver = new MutationObserver((records) => this.#onMutation(records));
5
+ #dependencies = []
6
+ #actionSelector = "[hx-live]"
7
+
8
+ constructor() {
9
+ this.#initInternals()
10
+ }
11
+
12
+ observe(elt, properties, prototype) {
13
+ if (!elt.__htmxLiveObserved) {
14
+ elt.__htmxLiveObserved = true
15
+ for (const property of properties) {
16
+ let descriptor = Object.getOwnPropertyDescriptor(prototype, property);
17
+ Object.defineProperty(elt, property, {
18
+ get() {
19
+ return descriptor.get.call(this);
20
+ },
21
+ set(newValue) {
22
+ descriptor.set.call(this, newValue);
23
+ htmxLive.updated(this)
24
+ }
25
+ });
26
+ }
27
+
28
+ }
29
+ }
30
+
31
+ #process(elt) {
32
+ if (elt.matches) {
33
+ if (elt.matches(this.#actionSelector)) {
34
+ this.#init(elt)
35
+ }
36
+ if (elt.matches('input')) {
37
+ this.observeInput(elt);
38
+ }
39
+ if (elt.matches('select')) {
40
+ this.observeSelect(elt);
41
+ }
42
+ }
43
+ if (elt.querySelectorAll) {
44
+ elt.querySelectorAll(this.#actionSelector).forEach((elt) => this.#init(elt))
45
+ elt.querySelectorAll('input').forEach((elt) => this.observeInput(elt))
46
+ elt.querySelectorAll('select').forEach((elt) => this.observeSelect(elt))
47
+ }
48
+ }
49
+
50
+ observeSelect(elt) {
51
+ this.observe(elt, ['value', 'disabled'], HTMLSelectElement.prototype)
52
+ }
53
+
54
+ observeInput(elt) {
55
+ this.observe(elt, ['value', 'checked', 'disabled'], HTMLInputElement.prototype)
56
+ }
57
+
58
+ #init(elt) {
59
+ if (!elt.__htmxLiveCode) {
60
+ elt.__htmxLiveCode = true
61
+ let liveCode = elt.getAttribute("hx-live");
62
+ let tokenizer = new Tokenizer(liveCode);
63
+ let parser = new Parser(tokenizer.tokenize());
64
+ let features = parser.parseFeatures();
65
+ for (const feature of features) {
66
+ feature.install(elt);
67
+ }
68
+ }
69
+ }
70
+
71
+ registerDependency(bindFeature) {
72
+ this.#dependencies.push(bindFeature)
73
+ }
74
+
75
+ #onMutation(records) {
76
+
77
+ for (let record of records) {
78
+ if(record.addedNodes.length > 0) {
79
+ this.#process(document.documentElement)
80
+ break
81
+ }
82
+ }
83
+
84
+ let toRefresh = []
85
+ outer:
86
+ for (const dependency of this.#dependencies) {
87
+ for (let record of records) {
88
+ if (dependency.dependsOn(record.target)) {
89
+ toRefresh.push(dependency);
90
+ break outer;
91
+ }
92
+ for (const elt of record.addedNodes) {
93
+ if (dependency.dependsOn(elt)) {
94
+ toRefresh.push(dependency)
95
+ break outer;
96
+ }
97
+ }
98
+ for (const elt of record.removedNodes) {
99
+ if (dependency.dependsOn(elt)) {
100
+ toRefresh.push(dependency)
101
+ break outer;
102
+ }
103
+ }
104
+ }
105
+ }
106
+ setTimeout(() => {
107
+ for (const dependency of toRefresh) {
108
+ dependency.refresh()
109
+ }
110
+ })
111
+ }
112
+
113
+ updated(elt) {
114
+ let toRefresh = []
115
+ for (const dependency of this.#dependencies) {
116
+ if (dependency.dependsOn(elt)) {
117
+ toRefresh.push(dependency)
118
+ }
119
+ }
120
+ for (const dependency of toRefresh) {
121
+ dependency.refresh()
122
+ }
123
+ }
124
+
125
+ #initInternals() {
126
+ document.addEventListener("DOMContentLoaded", () => {
127
+ document.addEventListener("input", (evt) => {
128
+ this.updated(evt.target);
129
+ })
130
+ this.#mutationObserver.observe(document.documentElement, {
131
+ childList: true,
132
+ subtree: true,
133
+ attributes: true,
134
+ characterData: true
135
+ })
136
+ this.#process(document.body)
137
+ })
138
+ }
139
+ }
140
+
141
+ let htmxLive = new HtmxLive();
142
+
143
+ class Tokenizer {
144
+ WHITESPACE = /\s/
145
+ SYNTAX = /[.()<>[\]+\-*\/]/
146
+ ALPHA = /[a-zA-Z]/
147
+ NUMERIC = /[0-9]/
148
+
149
+ constructor(src) {
150
+ this.src = src
151
+ this.offset = 0
152
+ this.prev = ''
153
+ }
154
+
155
+ tokenize() {
156
+ let tokens = []
157
+ while (this.more()) {
158
+ let token = this.nextToken()
159
+ if(token) tokens.push(token)
160
+ }
161
+ return tokens
162
+ }
163
+
164
+ more() {
165
+ return this.offset < this.src.length;
166
+ }
167
+
168
+ peek(off = 0) {
169
+ return this.src[this.offset + off]
170
+ }
171
+
172
+ match(thing, char = this.peek()) {
173
+ if (this.more()) {
174
+ if(thing.test) {
175
+ return thing.test(char)
176
+ } else {
177
+ return thing === char
178
+ }
179
+ }
180
+ }
181
+
182
+ consume() {
183
+ this.prev = this.peek()
184
+ this.offset++
185
+ return this.prev
186
+ }
187
+
188
+ nextToken() {
189
+ // consume whitespace
190
+ if (this.match(this.WHITESPACE)) {
191
+ return this.consumeWhitespace();
192
+ } else if (!this.ALPHA.test(this.prev) &&
193
+ this.match('.') &&
194
+ this.match(this.ALPHA, this.peek(1))) {
195
+ return this.consumeClass();
196
+ } else if (this.match(this.SYNTAX)) {
197
+ return this.consumeSyntax();
198
+ } else if ("#" === this.peek()) {
199
+ return this.consumeId();
200
+ } else if (this.match(this.ALPHA)) {
201
+ return this.consumeSymbol();
202
+ } else if (this.match(this.NUMERIC)) {
203
+ return this.consumeNumber();
204
+ } else if (this.match('"') || this.match("'")) {
205
+ return this.consumeString();
206
+ } else {
207
+ throw "Unknown token : " + this.peek()
208
+ }
209
+ }
210
+
211
+ consumeSyntax() {
212
+ return {type:'syntax', val: this.consume()}
213
+ }
214
+
215
+ consumeWhitespace() {
216
+ while (this.match(this.WHITESPACE)) {
217
+ this.consume();
218
+ }
219
+ return null
220
+ }
221
+
222
+ consumeId() {
223
+ let token = this.consume()
224
+ while (this.validCss(this.peek())) {
225
+ token += this.consume();
226
+ }
227
+ return {type:"id", val:token}
228
+ }
229
+
230
+ consumeSymbol() {
231
+ let token = this.consume()
232
+ while (this.match(this.ALPHA)) {
233
+ token += this.consume();
234
+ }
235
+ return {type:"sym", val:token}
236
+ }
237
+
238
+ consumeString() {
239
+ let start = this.consume()
240
+ let val = ""
241
+ while (!this.match(start) && this.more()) {
242
+ val += this.consume();
243
+ }
244
+ if(this.consume() !== start) throw "Unterminated string!";
245
+ return {type:"str", val:val}
246
+ }
247
+
248
+ consumeNumber() {
249
+ let token = this.consume()
250
+ while (this.match(this.NUMERIC)) {
251
+ token += this.consume();
252
+ }
253
+ if (this.match(".")) {
254
+ token += this.consume();
255
+ while (this.match(this.NUMERIC)) {
256
+ token += this.consume();
257
+ }
258
+ return {type:"num", val:Number.parseFloat(token)};
259
+ } else {
260
+ return {type:"num", val:Number.parseInt(token)};
261
+ }
262
+ }
263
+
264
+ consumeClass() {
265
+ let token = this.consume()
266
+ while (this.validCss(this.peek())) {
267
+ token += this.consume();
268
+ }
269
+ return {type:"class", val:token}
270
+ }
271
+
272
+ validCss(c) {
273
+ return this.match(this.ALPHA, c) || this.match(this.NUMERIC, c) || c === "-" || c === "_" || c === ":";
274
+ }
275
+ }
276
+
277
+ //========================================================================================
278
+ // Live Features
279
+ //========================================================================================
280
+ class BindFeature {
281
+ constructor(lhs, rhs) {
282
+ this.lhs = lhs
283
+ this.rhs = rhs
284
+ this.cssDependences = []
285
+ rhs.deps(this.cssDependences)
286
+ }
287
+
288
+ install(elt) {
289
+ this.elt = elt
290
+ htmxLive.registerDependency(this)
291
+ }
292
+
293
+ async refresh() {
294
+ let runtime = {"this": this.elt}
295
+ this.elt[this.lhs.property.val] = await this.rhs.eval(runtime)
296
+ }
297
+
298
+ dependsOn(elt) {
299
+ for (const css of this.cssDependences) {
300
+ if (elt.matches?.(css)) {
301
+ return true
302
+ }
303
+ }
304
+ return false
305
+ }
306
+ }
307
+
308
+ class OnFeature {
309
+ constructor(event, commands) {
310
+ this.event = event
311
+ this.commands = commands
312
+ }
313
+ install(elt) {
314
+ this.elt = elt
315
+ elt.addEventListener(this.event.val, async (evt) => {
316
+ let runtime = {}
317
+ for (const command of this.commands) {
318
+ await command.execute(runtime)
319
+ }
320
+ })
321
+ }
322
+ }
323
+
324
+ class Bindable {
325
+ constructor(property) {
326
+ this.property = property
327
+ }
328
+ }
329
+
330
+ //========================================================================================
331
+ // Commands
332
+ //========================================================================================
333
+
334
+ class CallCommand {
335
+ constructor(functionCall) {
336
+ this.call = functionCall
337
+ }
338
+ execute(runtime) {
339
+ this.call.eval(runtime)
340
+ }
341
+ }
342
+
343
+ //========================================================================================
344
+ // Expressions
345
+ //========================================================================================
346
+ class AdditiveExpression {
347
+ constructor(token, lhs, rhs) {
348
+ this.token = token
349
+ this.lhs = lhs
350
+ this.rhs = rhs
351
+ }
352
+
353
+ async eval(runtime) {
354
+ let result = await this.lhs.eval(runtime) + await this.rhs.eval(runtime);
355
+ return result
356
+ }
357
+
358
+ deps(deps) {
359
+ this.lhs.deps?.(deps);
360
+ this.rhs.deps?.(deps);
361
+ }
362
+ }
363
+
364
+ class StringLiteral {
365
+ constructor(token) {
366
+ this.token = token
367
+ }
368
+
369
+ async eval(runtime) {
370
+ return this.token.val
371
+ }
372
+ }
373
+
374
+ class IdLiteral {
375
+ constructor(token) {
376
+ this.token = token
377
+ }
378
+
379
+ async eval(runtime) {
380
+ return htmx.find(this.token.val)
381
+ }
382
+
383
+ deps(deps) {
384
+ deps.push(this.token.val);
385
+ }
386
+ }
387
+
388
+ class Identifier {
389
+ constructor(token) {
390
+ this.token = token
391
+ }
392
+
393
+ async eval(runtime) {
394
+ return runtime[this.token.val] || window[this.token.val]
395
+ }
396
+ }
397
+
398
+ class PropertyAccess {
399
+ constructor(root, property) {
400
+ this.root = root
401
+ this.property = property
402
+ }
403
+
404
+ async eval(runtime) {
405
+ let root = await this.root.eval(runtime);
406
+ return root[this.property.val]
407
+ }
408
+
409
+ deps(deps) {
410
+ this.root?.deps(deps);
411
+ }
412
+ }
413
+
414
+ class FunctionCall {
415
+ constructor(root, args) {
416
+ this.root = root
417
+ this.rootRoot = root.root
418
+ this.args = args
419
+ }
420
+
421
+ async eval(runtime) {
422
+ let rootRoot = null;
423
+ let func;
424
+ if (this.rootRoot) {
425
+ rootRoot = await this.rootRoot.eval(runtime);
426
+ func = rootRoot[this.root.property.val].bind(rootRoot);
427
+ } else {
428
+ func = await this.root.eval(runtime)
429
+ }
430
+ let args = []
431
+ for (const arg of this.args) {
432
+ args.push(await arg.eval(runtime))
433
+ }
434
+ return func.call(rootRoot, args)
435
+ }
436
+
437
+ deps(deps) {
438
+ this.root?.deps(deps);
439
+ }
440
+ }
441
+
442
+
443
+ //========================================================================================
444
+ // Parser
445
+ //========================================================================================
446
+ class Parser {
447
+ constructor(tokens) {
448
+ this.tokens = tokens
449
+ this.current = 0
450
+ }
451
+
452
+ moreTokens() {
453
+ return this.current < this.tokens.length
454
+ }
455
+
456
+ matchAndConsume(term, type = "sym") {
457
+ if (this.match(term, type)) {
458
+ return this.consumeToken()
459
+ }
460
+ }
461
+
462
+ match(term, type) {
463
+ return (this.currentToken().val === term || term === null) &&
464
+ (this.currentToken().type === type || type === null);
465
+ }
466
+
467
+ require(term, type = "sym") {
468
+ let match = this.matchAndConsume(term, type);
469
+ if (!match) throw "Expected: " + (term ? term : type) + " found " + JSON.stringify(this.currentToken());
470
+ return match
471
+ }
472
+
473
+ currentToken() {
474
+ let token = this.tokens[this.current];
475
+ return token || {type:null, val:null};
476
+ }
477
+
478
+ consumeToken() {
479
+ this.lastToken = this.currentToken();
480
+ this.current++
481
+ return this.lastToken
482
+ }
483
+
484
+ //======================================================
485
+ // Entry Point
486
+ //======================================================
487
+ parseFeatures() {
488
+ let features = []
489
+ while (this.moreTokens()) {
490
+ features.push(this.parseFeature())
491
+ }
492
+ return features
493
+ }
494
+
495
+ parseFeature() {
496
+ let bind = this.parseBind();
497
+ if(bind){
498
+ return bind;
499
+ }
500
+ let on = this.parseOn();
501
+ if(on){
502
+ return on;
503
+ }
504
+ throw "Unknown token: " + JSON.stringify(this.currentToken());
505
+ }
506
+
507
+ parseBind() {
508
+ if (this.matchAndConsume("bind")) {
509
+ let lhs = this.parseBindable();
510
+ this.require("to");
511
+ let rhs = this.parseExpression();
512
+ return new BindFeature(lhs, rhs)
513
+ }
514
+ }
515
+
516
+ parseOn() {
517
+ if (this.matchAndConsume("on")) {
518
+ let event = this.require(null, "sym");
519
+ let commands = this.parseCommands();
520
+ return new OnFeature(event, commands)
521
+ }
522
+ }
523
+
524
+ parseBindable() {
525
+ let property = this.require(null, "sym");
526
+ return new Bindable(property)
527
+ }
528
+
529
+ //======================================================
530
+ // Commands
531
+ //======================================================
532
+
533
+ parseCommands() {
534
+ let commands = []
535
+ while (this.moreTokens() && !this.endOfCommands()) {
536
+ commands.push(this.parseCommand())
537
+ }
538
+ return commands
539
+ }
540
+
541
+ endOfCommands() {
542
+ return this.matchAndConsume("end", "sym") ||
543
+ this.match("on") ||
544
+ this.match("bind");
545
+ }
546
+
547
+ parseCommand() {
548
+ let call = this.callCommand()
549
+ if(call) {
550
+ return call
551
+ }
552
+ throw "Unknown token: " + JSON.stringify(this.currentToken());
553
+ }
554
+
555
+ callCommand() {
556
+ if (this.matchAndConsume("call")) {
557
+ let expression = this.parseExpression();
558
+ if (expression instanceof FunctionCall) {
559
+ return new CallCommand(expression)
560
+ }
561
+ }
562
+ }
563
+
564
+ //======================================================
565
+ // Expressions
566
+ //======================================================
567
+
568
+ parseExpression() {
569
+ return this.parseAdditiveExpression();
570
+ }
571
+
572
+ parseAdditiveExpression() {
573
+ let lhs = this.parseIndirectExpression();
574
+ while (this.matchAndConsume("+", "syntax") || this.matchAndConsume("+", "syntax")) {
575
+ let rhs = this.parseIndirectExpression()
576
+ lhs = new AdditiveExpression(this.lastToken, lhs, rhs)
577
+ }
578
+ return lhs;
579
+ }
580
+
581
+ parseIndirectExpression() {
582
+ let root = this.parsePrimaryExpression();
583
+ while (true) {
584
+ if (this.matchAndConsume(".", "syntax")) {
585
+ let property = this.require(null, "sym");
586
+ root = new PropertyAccess(root, property)
587
+ } else if (this.matchAndConsume("(", "syntax")) {
588
+ let args = []
589
+ if (!this.match(")")) {
590
+ do {
591
+ args.push(this.parseExpression());
592
+ } while (this.matchAndConsume(",", "syntax"))
593
+ }
594
+ this.require(")", "syntax")
595
+ root = new FunctionCall(root, args);
596
+ } else {
597
+ break
598
+ }
599
+ }
600
+ return root
601
+ }
602
+
603
+ parsePrimaryExpression() {
604
+ if (this.currentToken()?.type === "str") {
605
+ return new StringLiteral(this.consumeToken());
606
+ }
607
+ if (this.currentToken()?.type === "id") {
608
+ return new IdLiteral(this.consumeToken());
609
+ }
610
+ if (this.currentToken()?.type === "sym") {
611
+ return new Identifier(this.consumeToken());
612
+ }
613
+ if (this.matchAndConsume("(", "syntax")) {
614
+ let expr = this.parseExpression();
615
+ this.require(")", "syntax");
616
+ return expr;
617
+ }
618
+ throw "Unknown token: " + JSON.stringify(this.currentToken());
619
+ }
620
+
621
+ }
622
+
623
+ return htmxLive
624
+ })()
@@ -0,0 +1 @@
1
+ htmxLive=(()=>{let t=new class{#t=new MutationObserver(t=>this.#e(t));#s=[];#n="[hx-live]";constructor(){this.#r()}observe(e,s,n){if(!e.__htmxLiveObserved){e.__htmxLiveObserved=!0;for(const r of s){let s=Object.getOwnPropertyDescriptor(n,r);Object.defineProperty(e,r,{get(){return s.get.call(this)},set(e){s.set.call(this,e),t.updated(this)}})}}}#i(t){t.matches&&(t.matches(this.#n)&&this.#o(t),t.matches("input")&&this.observeInput(t),t.matches("select")&&this.observeSelect(t)),t.querySelectorAll&&(t.querySelectorAll(this.#n).forEach(t=>this.#o(t)),t.querySelectorAll("input").forEach(t=>this.observeInput(t)),t.querySelectorAll("select").forEach(t=>this.observeSelect(t)))}observeSelect(t){this.observe(t,["value","disabled"],HTMLSelectElement.prototype)}observeInput(t){this.observe(t,["value","checked","disabled"],HTMLInputElement.prototype)}#o(t){if(!t.__htmxLiveCode){t.__htmxLiveCode=!0;let s=t.getAttribute("hx-live"),n=new e(s),r=new m(n.tokenize()).parseFeatures();for(const e of r)e.install(t)}}registerDependency(t){this.#s.push(t)}#e(t){for(let e of t)if(e.addedNodes.length>0){this.#i(document.documentElement);break}let e=[];t:for(const s of this.#s)for(let n of t){if(s.dependsOn(n.target)){e.push(s);break t}for(const t of n.addedNodes)if(s.dependsOn(t)){e.push(s);break t}for(const t of n.removedNodes)if(s.dependsOn(t)){e.push(s);break t}}setTimeout(()=>{for(const t of e)t.refresh()})}updated(t){let e=[];for(const s of this.#s)s.dependsOn(t)&&e.push(s);for(const t of e)t.refresh()}#r(){document.addEventListener("DOMContentLoaded",()=>{document.addEventListener("input",t=>{this.updated(t.target)}),this.#t.observe(document.documentElement,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),this.#i(document.body)})}};class e{WHITESPACE=/\s/;SYNTAX=/[.()<>[\]+\-*\/]/;ALPHA=/[a-zA-Z]/;NUMERIC=/[0-9]/;constructor(t){this.src=t,this.offset=0,this.prev=""}tokenize(){let t=[];for(;this.more();){let e=this.nextToken();e&&t.push(e)}return t}more(){return this.offset<this.src.length}peek(t=0){return this.src[this.offset+t]}match(t,e=this.peek()){if(this.more())return t.test?t.test(e):t===e}consume(){return this.prev=this.peek(),this.offset++,this.prev}nextToken(){if(this.match(this.WHITESPACE))return this.consumeWhitespace();if(!this.ALPHA.test(this.prev)&&this.match(".")&&this.match(this.ALPHA,this.peek(1)))return this.consumeClass();if(this.match(this.SYNTAX))return this.consumeSyntax();if("#"===this.peek())return this.consumeId();if(this.match(this.ALPHA))return this.consumeSymbol();if(this.match(this.NUMERIC))return this.consumeNumber();if(this.match('"')||this.match("'"))return this.consumeString();throw"Unknown token : "+this.peek()}consumeSyntax(){return{type:"syntax",val:this.consume()}}consumeWhitespace(){for(;this.match(this.WHITESPACE);)this.consume();return null}consumeId(){let t=this.consume();for(;this.validCss(this.peek());)t+=this.consume();return{type:"id",val:t}}consumeSymbol(){let t=this.consume();for(;this.match(this.ALPHA);)t+=this.consume();return{type:"sym",val:t}}consumeString(){let t=this.consume(),e="";for(;!this.match(t)&&this.more();)e+=this.consume();if(this.consume()!==t)throw"Unterminated string!";return{type:"str",val:e}}consumeNumber(){let t=this.consume();for(;this.match(this.NUMERIC);)t+=this.consume();if(this.match(".")){for(t+=this.consume();this.match(this.NUMERIC);)t+=this.consume();return{type:"num",val:Number.parseFloat(t)}}return{type:"num",val:Number.parseInt(t)}}consumeClass(){let t=this.consume();for(;this.validCss(this.peek());)t+=this.consume();return{type:"class",val:t}}validCss(t){return this.match(this.ALPHA,t)||this.match(this.NUMERIC,t)||"-"===t||"_"===t||":"===t}}class s{constructor(t,e){this.lhs=t,this.rhs=e,this.cssDependences=[],e.deps(this.cssDependences)}install(e){this.elt=e,t.registerDependency(this)}async refresh(){let t={this:this.elt};this.elt[this.lhs.property.val]=await this.rhs.eval(t)}dependsOn(t){for(const e of this.cssDependences)if(t.matches?.(e))return!0;return!1}}class n{constructor(t,e){this.event=t,this.commands=e}install(t){this.elt=t,t.addEventListener(this.event.val,async t=>{let e={};for(const t of this.commands)await t.execute(e)})}}class r{constructor(t){this.property=t}}class i{constructor(t){this.call=t}execute(t){this.call.eval(t)}}class o{constructor(t,e,s){this.token=t,this.lhs=e,this.rhs=s}async eval(t){return await this.lhs.eval(t)+await this.rhs.eval(t)}deps(t){this.lhs.deps?.(t),this.rhs.deps?.(t)}}class h{constructor(t){this.token=t}async eval(t){return this.token.val}}class a{constructor(t){this.token=t}async eval(t){return htmx.find(this.token.val)}deps(t){t.push(this.token.val)}}class c{constructor(t){this.token=t}async eval(t){return t[this.token.val]||window[this.token.val]}}class u{constructor(t,e){this.root=t,this.property=e}async eval(t){return(await this.root.eval(t))[this.property.val]}deps(t){this.root?.deps(t)}}class l{constructor(t,e){this.root=t,this.rootRoot=t.root,this.args=e}async eval(t){let e,s=null;this.rootRoot?(s=await this.rootRoot.eval(t),e=s[this.root.property.val].bind(s)):e=await this.root.eval(t);let n=[];for(const e of this.args)n.push(await e.eval(t));return e.call(s,n)}deps(t){this.root?.deps(t)}}class m{constructor(t){this.tokens=t,this.current=0}moreTokens(){return this.current<this.tokens.length}matchAndConsume(t,e="sym"){if(this.match(t,e))return this.consumeToken()}match(t,e){return!(this.currentToken().val!==t&&null!==t||this.currentToken().type!==e&&null!==e)}require(t,e="sym"){let s=this.matchAndConsume(t,e);if(!s)throw"Expected: "+(t||e)+" found "+JSON.stringify(this.currentToken());return s}currentToken(){return this.tokens[this.current]||{type:null,val:null}}consumeToken(){return this.lastToken=this.currentToken(),this.current++,this.lastToken}parseFeatures(){let t=[];for(;this.moreTokens();)t.push(this.parseFeature());return t}parseFeature(){let t=this.parseBind();if(t)return t;let e=this.parseOn();if(e)return e;throw"Unknown token: "+JSON.stringify(this.currentToken())}parseBind(){if(this.matchAndConsume("bind")){let t=this.parseBindable();this.require("to");let e=this.parseExpression();return new s(t,e)}}parseOn(){if(this.matchAndConsume("on")){let t=this.require(null,"sym"),e=this.parseCommands();return new n(t,e)}}parseBindable(){let t=this.require(null,"sym");return new r(t)}parseCommands(){let t=[];for(;this.moreTokens()&&!this.endOfCommands();)t.push(this.parseCommand());return t}endOfCommands(){return this.matchAndConsume("end","sym")||this.match("on")||this.match("bind")}parseCommand(){let t=this.callCommand();if(t)return t;throw"Unknown token: "+JSON.stringify(this.currentToken())}callCommand(){if(this.matchAndConsume("call")){let t=this.parseExpression();if(t instanceof l)return new i(t)}}parseExpression(){return this.parseAdditiveExpression()}parseAdditiveExpression(){let t=this.parseIndirectExpression();for(;this.matchAndConsume("+","syntax")||this.matchAndConsume("+","syntax");){let e=this.parseIndirectExpression();t=new o(this.lastToken,t,e)}return t}parseIndirectExpression(){let t=this.parsePrimaryExpression();for(;;)if(this.matchAndConsume(".","syntax")){let e=this.require(null,"sym");t=new u(t,e)}else{if(!this.matchAndConsume("(","syntax"))break;{let e=[];if(!this.match(")"))do{e.push(this.parseExpression())}while(this.matchAndConsume(",","syntax"));this.require(")","syntax"),t=new l(t,e)}}return t}parsePrimaryExpression(){if("str"===this.currentToken()?.type)return new h(this.consumeToken());if("id"===this.currentToken()?.type)return new a(this.consumeToken());if("sym"===this.currentToken()?.type)return new c(this.consumeToken());if(this.matchAndConsume("(","syntax")){let t=this.parseExpression();return this.require(")","syntax"),t}throw"Unknown token: "+JSON.stringify(this.currentToken())}}return t})();
@@ -0,0 +1 @@
1
+ {"version":3,"names":["htmxLive","mutationObserver","MutationObserver","records","this","onMutation","dependencies","actionSelector","constructor","initInternals","observe","elt","properties","prototype","__htmxLiveObserved","property","descriptor","Object","getOwnPropertyDescriptor","defineProperty","get","call","set","newValue","updated","process","matches","init","observeInput","observeSelect","querySelectorAll","forEach","HTMLSelectElement","HTMLInputElement","__htmxLiveCode","liveCode","getAttribute","tokenizer","Tokenizer","features","Parser","tokenize","parseFeatures","feature","install","registerDependency","bindFeature","push","record","addedNodes","length","document","documentElement","toRefresh","outer","dependency","dependsOn","target","removedNodes","setTimeout","refresh","addEventListener","evt","childList","subtree","attributes","characterData","body","WHITESPACE","SYNTAX","ALPHA","NUMERIC","src","offset","prev","tokens","more","token","nextToken","peek","off","match","thing","char","test","consume","consumeWhitespace","consumeClass","consumeSyntax","consumeId","consumeSymbol","consumeNumber","consumeString","type","val","validCss","start","Number","parseFloat","parseInt","c","BindFeature","lhs","rhs","cssDependences","deps","runtime","eval","css","OnFeature","event","commands","async","command","execute","Bindable","CallCommand","functionCall","AdditiveExpression","StringLiteral","IdLiteral","htmx","find","Identifier","window","PropertyAccess","root","FunctionCall","args","rootRoot","func","bind","arg","current","moreTokens","matchAndConsume","term","consumeToken","currentToken","require","JSON","stringify","lastToken","parseFeature","parseBind","on","parseOn","parseBindable","parseExpression","parseCommands","endOfCommands","parseCommand","callCommand","expression","parseAdditiveExpression","parseIndirectExpression","parsePrimaryExpression","expr"],"sources":["dist/ext/hx-live.js"],"mappings":"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","ignoreList":[]}