@ugfoundation/swaralipi-js 0.1.0 → 0.1.2

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 (43) hide show
  1. package/dist/{batch-NF2Q2CFS.js → batch-V3EV3QAC.js} +5 -5
  2. package/dist/{batch-NF2Q2CFS.js.map → batch-V3EV3QAC.js.map} +1 -1
  3. package/dist/{chunk-C6O7DYU5.js → chunk-LN463EEN.js} +10 -3
  4. package/dist/chunk-LN463EEN.js.map +1 -0
  5. package/dist/{chunk-GWXI2HJA.js → chunk-VCXQJ2GB.js} +4 -2
  6. package/dist/chunk-VCXQJ2GB.js.map +1 -0
  7. package/dist/{chunk-N3NNWAOW.js → chunk-XD2RRIVH.js} +4 -4
  8. package/dist/{chunk-N3NNWAOW.js.map → chunk-XD2RRIVH.js.map} +1 -1
  9. package/dist/cli.cjs +10 -1
  10. package/dist/cli.cjs.map +1 -1
  11. package/dist/cli.js +3 -3
  12. package/dist/convert/index.cjs +10 -1
  13. package/dist/convert/index.cjs.map +1 -1
  14. package/dist/convert/index.d.cts +1 -1
  15. package/dist/convert/index.d.ts +1 -1
  16. package/dist/convert/index.js +3 -3
  17. package/dist/index.cjs +10 -1
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.d.cts +2 -2
  20. package/dist/index.d.ts +2 -2
  21. package/dist/index.js +2 -2
  22. package/dist/player/index.cjs +41 -7
  23. package/dist/player/index.cjs.map +1 -1
  24. package/dist/player/index.d.cts +36 -7
  25. package/dist/player/index.d.ts +36 -7
  26. package/dist/player/index.js +38 -9
  27. package/dist/player/index.js.map +1 -1
  28. package/dist/{schema-gxhG45OK.d.cts → schema-D3wyNRqM.d.cts} +39 -0
  29. package/dist/{schema-gxhG45OK.d.ts → schema-D3wyNRqM.d.ts} +39 -0
  30. package/dist/spec/index.cjs +10 -1
  31. package/dist/spec/index.cjs.map +1 -1
  32. package/dist/spec/index.d.cts +6 -4
  33. package/dist/spec/index.d.ts +6 -4
  34. package/dist/spec/index.js +2 -2
  35. package/dist/{taals-DguYW0wf.d.cts → taals-B5RcMMIt.d.cts} +12 -2
  36. package/dist/{taals-DguYW0wf.d.ts → taals-B5RcMMIt.d.ts} +12 -2
  37. package/dist/viewer/index.cjs +10 -1
  38. package/dist/viewer/index.cjs.map +1 -1
  39. package/dist/viewer/index.d.cts +1 -1
  40. package/dist/viewer/index.d.ts +1 -1
  41. package/package.json +1 -1
  42. package/dist/chunk-C6O7DYU5.js.map +0 -1
  43. package/dist/chunk-GWXI2HJA.js.map +0 -1
@@ -146,6 +146,13 @@ type Part = z.infer<typeof partSchema>;
146
146
  declare const taalSchema: z.ZodEffects<z.ZodObject<{
147
147
  /** Player sample key, e.g. `dadra`, `teentaal`. */
148
148
  id: z.ZodString;
149
+ /**
150
+ * Which tabla loop variation to play, e.g. `pro` (CDN dir suffix). Optional
151
+ * and additive — omitted means the taal's default variation, so existing
152
+ * docs are unaffected. The player honors it but never exposes a variation
153
+ * picker; selecting a non-default variation is the consumer's premium policy.
154
+ */
155
+ variation: z.ZodOptional<z.ZodString>;
149
156
  numBeats: z.ZodNumber;
150
157
  /** Vibhag groupings; if given, they sum to numBeats. */
151
158
  bhaags: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
@@ -156,24 +163,28 @@ declare const taalSchema: z.ZodEffects<z.ZodObject<{
156
163
  }, "strip", z.ZodTypeAny, {
157
164
  id: string;
158
165
  numBeats: number;
166
+ variation?: string | undefined;
159
167
  bhaags?: number[] | undefined;
160
168
  sam?: number | undefined;
161
169
  khaali?: number[] | undefined;
162
170
  }, {
163
171
  id: string;
164
172
  numBeats: number;
173
+ variation?: string | undefined;
165
174
  bhaags?: number[] | undefined;
166
175
  sam?: number | undefined;
167
176
  khaali?: number[] | undefined;
168
177
  }>, {
169
178
  id: string;
170
179
  numBeats: number;
180
+ variation?: string | undefined;
171
181
  bhaags?: number[] | undefined;
172
182
  sam?: number | undefined;
173
183
  khaali?: number[] | undefined;
174
184
  }, {
175
185
  id: string;
176
186
  numBeats: number;
187
+ variation?: string | undefined;
177
188
  bhaags?: number[] | undefined;
178
189
  sam?: number | undefined;
179
190
  khaali?: number[] | undefined;
@@ -189,6 +200,13 @@ declare const metaSchema: z.ZodObject<{
189
200
  taal: z.ZodOptional<z.ZodEffects<z.ZodObject<{
190
201
  /** Player sample key, e.g. `dadra`, `teentaal`. */
191
202
  id: z.ZodString;
203
+ /**
204
+ * Which tabla loop variation to play, e.g. `pro` (CDN dir suffix). Optional
205
+ * and additive — omitted means the taal's default variation, so existing
206
+ * docs are unaffected. The player honors it but never exposes a variation
207
+ * picker; selecting a non-default variation is the consumer's premium policy.
208
+ */
209
+ variation: z.ZodOptional<z.ZodString>;
192
210
  numBeats: z.ZodNumber;
193
211
  /** Vibhag groupings; if given, they sum to numBeats. */
194
212
  bhaags: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
@@ -199,24 +217,28 @@ declare const metaSchema: z.ZodObject<{
199
217
  }, "strip", z.ZodTypeAny, {
200
218
  id: string;
201
219
  numBeats: number;
220
+ variation?: string | undefined;
202
221
  bhaags?: number[] | undefined;
203
222
  sam?: number | undefined;
204
223
  khaali?: number[] | undefined;
205
224
  }, {
206
225
  id: string;
207
226
  numBeats: number;
227
+ variation?: string | undefined;
208
228
  bhaags?: number[] | undefined;
209
229
  sam?: number | undefined;
210
230
  khaali?: number[] | undefined;
211
231
  }>, {
212
232
  id: string;
213
233
  numBeats: number;
234
+ variation?: string | undefined;
214
235
  bhaags?: number[] | undefined;
215
236
  sam?: number | undefined;
216
237
  khaali?: number[] | undefined;
217
238
  }, {
218
239
  id: string;
219
240
  numBeats: number;
241
+ variation?: string | undefined;
220
242
  bhaags?: number[] | undefined;
221
243
  sam?: number | undefined;
222
244
  khaali?: number[] | undefined;
@@ -247,6 +269,7 @@ declare const metaSchema: z.ZodObject<{
247
269
  taal?: {
248
270
  id: string;
249
271
  numBeats: number;
272
+ variation?: string | undefined;
250
273
  bhaags?: number[] | undefined;
251
274
  sam?: number | undefined;
252
275
  khaali?: number[] | undefined;
@@ -265,6 +288,7 @@ declare const metaSchema: z.ZodObject<{
265
288
  taal?: {
266
289
  id: string;
267
290
  numBeats: number;
291
+ variation?: string | undefined;
268
292
  bhaags?: number[] | undefined;
269
293
  sam?: number | undefined;
270
294
  khaali?: number[] | undefined;
@@ -291,6 +315,13 @@ declare const swaralipiSchema: z.ZodObject<{
291
315
  taal: z.ZodOptional<z.ZodEffects<z.ZodObject<{
292
316
  /** Player sample key, e.g. `dadra`, `teentaal`. */
293
317
  id: z.ZodString;
318
+ /**
319
+ * Which tabla loop variation to play, e.g. `pro` (CDN dir suffix). Optional
320
+ * and additive — omitted means the taal's default variation, so existing
321
+ * docs are unaffected. The player honors it but never exposes a variation
322
+ * picker; selecting a non-default variation is the consumer's premium policy.
323
+ */
324
+ variation: z.ZodOptional<z.ZodString>;
294
325
  numBeats: z.ZodNumber;
295
326
  /** Vibhag groupings; if given, they sum to numBeats. */
296
327
  bhaags: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
@@ -301,24 +332,28 @@ declare const swaralipiSchema: z.ZodObject<{
301
332
  }, "strip", z.ZodTypeAny, {
302
333
  id: string;
303
334
  numBeats: number;
335
+ variation?: string | undefined;
304
336
  bhaags?: number[] | undefined;
305
337
  sam?: number | undefined;
306
338
  khaali?: number[] | undefined;
307
339
  }, {
308
340
  id: string;
309
341
  numBeats: number;
342
+ variation?: string | undefined;
310
343
  bhaags?: number[] | undefined;
311
344
  sam?: number | undefined;
312
345
  khaali?: number[] | undefined;
313
346
  }>, {
314
347
  id: string;
315
348
  numBeats: number;
349
+ variation?: string | undefined;
316
350
  bhaags?: number[] | undefined;
317
351
  sam?: number | undefined;
318
352
  khaali?: number[] | undefined;
319
353
  }, {
320
354
  id: string;
321
355
  numBeats: number;
356
+ variation?: string | undefined;
322
357
  bhaags?: number[] | undefined;
323
358
  sam?: number | undefined;
324
359
  khaali?: number[] | undefined;
@@ -349,6 +384,7 @@ declare const swaralipiSchema: z.ZodObject<{
349
384
  taal?: {
350
385
  id: string;
351
386
  numBeats: number;
387
+ variation?: string | undefined;
352
388
  bhaags?: number[] | undefined;
353
389
  sam?: number | undefined;
354
390
  khaali?: number[] | undefined;
@@ -367,6 +403,7 @@ declare const swaralipiSchema: z.ZodObject<{
367
403
  taal?: {
368
404
  id: string;
369
405
  numBeats: number;
406
+ variation?: string | undefined;
370
407
  bhaags?: number[] | undefined;
371
408
  sam?: number | undefined;
372
409
  khaali?: number[] | undefined;
@@ -414,6 +451,7 @@ declare const swaralipiSchema: z.ZodObject<{
414
451
  taal?: {
415
452
  id: string;
416
453
  numBeats: number;
454
+ variation?: string | undefined;
417
455
  bhaags?: number[] | undefined;
418
456
  sam?: number | undefined;
419
457
  khaali?: number[] | undefined;
@@ -442,6 +480,7 @@ declare const swaralipiSchema: z.ZodObject<{
442
480
  taal?: {
443
481
  id: string;
444
482
  numBeats: number;
483
+ variation?: string | undefined;
445
484
  bhaags?: number[] | undefined;
446
485
  sam?: number | undefined;
447
486
  khaali?: number[] | undefined;
@@ -146,6 +146,13 @@ type Part = z.infer<typeof partSchema>;
146
146
  declare const taalSchema: z.ZodEffects<z.ZodObject<{
147
147
  /** Player sample key, e.g. `dadra`, `teentaal`. */
148
148
  id: z.ZodString;
149
+ /**
150
+ * Which tabla loop variation to play, e.g. `pro` (CDN dir suffix). Optional
151
+ * and additive — omitted means the taal's default variation, so existing
152
+ * docs are unaffected. The player honors it but never exposes a variation
153
+ * picker; selecting a non-default variation is the consumer's premium policy.
154
+ */
155
+ variation: z.ZodOptional<z.ZodString>;
149
156
  numBeats: z.ZodNumber;
150
157
  /** Vibhag groupings; if given, they sum to numBeats. */
151
158
  bhaags: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
@@ -156,24 +163,28 @@ declare const taalSchema: z.ZodEffects<z.ZodObject<{
156
163
  }, "strip", z.ZodTypeAny, {
157
164
  id: string;
158
165
  numBeats: number;
166
+ variation?: string | undefined;
159
167
  bhaags?: number[] | undefined;
160
168
  sam?: number | undefined;
161
169
  khaali?: number[] | undefined;
162
170
  }, {
163
171
  id: string;
164
172
  numBeats: number;
173
+ variation?: string | undefined;
165
174
  bhaags?: number[] | undefined;
166
175
  sam?: number | undefined;
167
176
  khaali?: number[] | undefined;
168
177
  }>, {
169
178
  id: string;
170
179
  numBeats: number;
180
+ variation?: string | undefined;
171
181
  bhaags?: number[] | undefined;
172
182
  sam?: number | undefined;
173
183
  khaali?: number[] | undefined;
174
184
  }, {
175
185
  id: string;
176
186
  numBeats: number;
187
+ variation?: string | undefined;
177
188
  bhaags?: number[] | undefined;
178
189
  sam?: number | undefined;
179
190
  khaali?: number[] | undefined;
@@ -189,6 +200,13 @@ declare const metaSchema: z.ZodObject<{
189
200
  taal: z.ZodOptional<z.ZodEffects<z.ZodObject<{
190
201
  /** Player sample key, e.g. `dadra`, `teentaal`. */
191
202
  id: z.ZodString;
203
+ /**
204
+ * Which tabla loop variation to play, e.g. `pro` (CDN dir suffix). Optional
205
+ * and additive — omitted means the taal's default variation, so existing
206
+ * docs are unaffected. The player honors it but never exposes a variation
207
+ * picker; selecting a non-default variation is the consumer's premium policy.
208
+ */
209
+ variation: z.ZodOptional<z.ZodString>;
192
210
  numBeats: z.ZodNumber;
193
211
  /** Vibhag groupings; if given, they sum to numBeats. */
194
212
  bhaags: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
@@ -199,24 +217,28 @@ declare const metaSchema: z.ZodObject<{
199
217
  }, "strip", z.ZodTypeAny, {
200
218
  id: string;
201
219
  numBeats: number;
220
+ variation?: string | undefined;
202
221
  bhaags?: number[] | undefined;
203
222
  sam?: number | undefined;
204
223
  khaali?: number[] | undefined;
205
224
  }, {
206
225
  id: string;
207
226
  numBeats: number;
227
+ variation?: string | undefined;
208
228
  bhaags?: number[] | undefined;
209
229
  sam?: number | undefined;
210
230
  khaali?: number[] | undefined;
211
231
  }>, {
212
232
  id: string;
213
233
  numBeats: number;
234
+ variation?: string | undefined;
214
235
  bhaags?: number[] | undefined;
215
236
  sam?: number | undefined;
216
237
  khaali?: number[] | undefined;
217
238
  }, {
218
239
  id: string;
219
240
  numBeats: number;
241
+ variation?: string | undefined;
220
242
  bhaags?: number[] | undefined;
221
243
  sam?: number | undefined;
222
244
  khaali?: number[] | undefined;
@@ -247,6 +269,7 @@ declare const metaSchema: z.ZodObject<{
247
269
  taal?: {
248
270
  id: string;
249
271
  numBeats: number;
272
+ variation?: string | undefined;
250
273
  bhaags?: number[] | undefined;
251
274
  sam?: number | undefined;
252
275
  khaali?: number[] | undefined;
@@ -265,6 +288,7 @@ declare const metaSchema: z.ZodObject<{
265
288
  taal?: {
266
289
  id: string;
267
290
  numBeats: number;
291
+ variation?: string | undefined;
268
292
  bhaags?: number[] | undefined;
269
293
  sam?: number | undefined;
270
294
  khaali?: number[] | undefined;
@@ -291,6 +315,13 @@ declare const swaralipiSchema: z.ZodObject<{
291
315
  taal: z.ZodOptional<z.ZodEffects<z.ZodObject<{
292
316
  /** Player sample key, e.g. `dadra`, `teentaal`. */
293
317
  id: z.ZodString;
318
+ /**
319
+ * Which tabla loop variation to play, e.g. `pro` (CDN dir suffix). Optional
320
+ * and additive — omitted means the taal's default variation, so existing
321
+ * docs are unaffected. The player honors it but never exposes a variation
322
+ * picker; selecting a non-default variation is the consumer's premium policy.
323
+ */
324
+ variation: z.ZodOptional<z.ZodString>;
294
325
  numBeats: z.ZodNumber;
295
326
  /** Vibhag groupings; if given, they sum to numBeats. */
296
327
  bhaags: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
@@ -301,24 +332,28 @@ declare const swaralipiSchema: z.ZodObject<{
301
332
  }, "strip", z.ZodTypeAny, {
302
333
  id: string;
303
334
  numBeats: number;
335
+ variation?: string | undefined;
304
336
  bhaags?: number[] | undefined;
305
337
  sam?: number | undefined;
306
338
  khaali?: number[] | undefined;
307
339
  }, {
308
340
  id: string;
309
341
  numBeats: number;
342
+ variation?: string | undefined;
310
343
  bhaags?: number[] | undefined;
311
344
  sam?: number | undefined;
312
345
  khaali?: number[] | undefined;
313
346
  }>, {
314
347
  id: string;
315
348
  numBeats: number;
349
+ variation?: string | undefined;
316
350
  bhaags?: number[] | undefined;
317
351
  sam?: number | undefined;
318
352
  khaali?: number[] | undefined;
319
353
  }, {
320
354
  id: string;
321
355
  numBeats: number;
356
+ variation?: string | undefined;
322
357
  bhaags?: number[] | undefined;
323
358
  sam?: number | undefined;
324
359
  khaali?: number[] | undefined;
@@ -349,6 +384,7 @@ declare const swaralipiSchema: z.ZodObject<{
349
384
  taal?: {
350
385
  id: string;
351
386
  numBeats: number;
387
+ variation?: string | undefined;
352
388
  bhaags?: number[] | undefined;
353
389
  sam?: number | undefined;
354
390
  khaali?: number[] | undefined;
@@ -367,6 +403,7 @@ declare const swaralipiSchema: z.ZodObject<{
367
403
  taal?: {
368
404
  id: string;
369
405
  numBeats: number;
406
+ variation?: string | undefined;
370
407
  bhaags?: number[] | undefined;
371
408
  sam?: number | undefined;
372
409
  khaali?: number[] | undefined;
@@ -414,6 +451,7 @@ declare const swaralipiSchema: z.ZodObject<{
414
451
  taal?: {
415
452
  id: string;
416
453
  numBeats: number;
454
+ variation?: string | undefined;
417
455
  bhaags?: number[] | undefined;
418
456
  sam?: number | undefined;
419
457
  khaali?: number[] | undefined;
@@ -442,6 +480,7 @@ declare const swaralipiSchema: z.ZodObject<{
442
480
  taal?: {
443
481
  id: string;
444
482
  numBeats: number;
483
+ variation?: string | undefined;
445
484
  bhaags?: number[] | undefined;
446
485
  sam?: number | undefined;
447
486
  khaali?: number[] | undefined;
@@ -59,6 +59,13 @@ var partSchema = zod.z.object({
59
59
  var taalSchema = zod.z.object({
60
60
  /** Player sample key, e.g. `dadra`, `teentaal`. */
61
61
  id: zod.z.string(),
62
+ /**
63
+ * Which tabla loop variation to play, e.g. `pro` (CDN dir suffix). Optional
64
+ * and additive — omitted means the taal's default variation, so existing
65
+ * docs are unaffected. The player honors it but never exposes a variation
66
+ * picker; selecting a non-default variation is the consumer's premium policy.
67
+ */
68
+ variation: zod.z.string().optional(),
62
69
  numBeats: zod.z.number().int().positive(),
63
70
  /** Vibhag groupings; if given, they sum to numBeats. */
64
71
  bhaags: zod.z.array(zod.z.number().int().positive()).optional(),
@@ -111,11 +118,13 @@ var TAALS = {
111
118
  jhaptaal: { id: "jhaptaal", numBeats: 10, bhaags: [2, 3, 2, 3], sam: 0, khaali: [5] },
112
119
  ektaal: { id: "ektaal", numBeats: 12, bhaags: [2, 2, 2, 2, 2, 2], sam: 0, khaali: [2, 6] },
113
120
  adachautaal: { id: "adachautaal", numBeats: 14, sam: 0 },
121
+ shashthi: { id: "shashthi", numBeats: 6, bhaags: [2, 4], sam: 0 },
122
+ // ষষ্ঠী
114
123
  teentaal: { id: "teentaal", numBeats: 16, bhaags: [4, 4, 4, 4], sam: 0, khaali: [8] }
115
124
  };
116
125
 
117
126
  // src/spec/index.ts
118
- var SPEC_VERSION = "0.1.0";
127
+ var SPEC_VERSION = "0.1.2";
119
128
  function parseSwaralipi(data) {
120
129
  return swaralipiSchema.parse(data);
121
130
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/spec/schema.ts","../../src/spec/taals.ts","../../src/spec/index.ts"],"names":["z"],"mappings":"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","file":"index.cjs","sourcesContent":["import { z } from 'zod';\n\n/**\n * swaralipi-js JSON spec — Zod schema + inferred types.\n\n/** Octave registers */\nexport const octaveSchema = z.enum([\n 'ati-mandra', // very low\n 'mandra', // low (dot below)\n 'madhyam', // middle\n 'taar', // high (ref/dot above)\n 'ati-taar', // very high\n]);\nexport type Octave = z.infer<typeof octaveSchema>;\n\n/**\n * The seven shuddha svara letters:\n * `d` = ধৈবত (dha), `n` = নিষাদ (ni). Komal/tivra are flags, not letters.\n */\nexport const svaraLetterSchema = z.enum(['s', 'r', 'g', 'm', 'p', 'd', 'n']);\nexport type SvaraLetter = z.infer<typeof svaraLetterSchema>;\n\n/** A pitch as `[octave, letter]` */\nexport const svaraSchema = z.tuple([octaveSchema, svaraLetterSchema]);\nexport type Svara = z.infer<typeof svaraSchema>;\n\n/** Microtone variants below komal (legend: অল্পকোমল / অতিকোমল). */\nexport const microtoneSchema = z.enum(['alpakomal', 'atikomal']);\nexport type Microtone = z.infer<typeof microtoneSchema>;\n\n/**\n * Barline weights. Swarabitan distinguishes the light দাঁড়ি (।) that\n * separates vibhags *within* a taal cycle from the দণ্ড (danda, I) strokes:\n * - `dari` — । vibhag separator inside the cycle\n * - `single` — I end of one taal cycle (ফেরা)\n * - `double` — II section (kali) boundary / return-to-asthayi marker\n * - `quad` — IIII end of the song\n */\nexport const barSchema = z.enum(['dari', 'single', 'double', 'quad']);\nexport type Bar = z.infer<typeof barSchema>;\n\n/**\n * A repeat-bracket edge. Brackets span a range of notes; the opening note\n * carries `{ ..., edge: 'open' }` and the closing note `{ ..., edge: 'close' }`.\n * kind: `repeat` = {} গুন্ডবন্ধনী, `skip` = () বক্রবন্ধনী (omit on repeat),\n * `alt` = [] সরল বন্ধনী (changed notes on repeat).\n */\nexport const bracketSchema = z.object({\n kind: z.enum(['repeat', 'skip', 'alt']),\n edge: z.enum(['open', 'close']),\n});\nexport type Bracket = z.infer<typeof bracketSchema>;\n\n/**\n * A single token in a row. A token is one of: a pitched note (`svara`),\n * a rest (`rest`), an আ-কার sustain (`sustain`), a barline (`bar`), or a\n * purely raw/undecoded cell (`raw`) — possibly carrying annotations\n * (`above`/`below`) or a lyric syllable on an otherwise empty column.\n * The `.refine` enforces that a note carries at least one of these so\n * truly empty tokens can't slip through.\n *\n * `above`/`below` make `Note` recursive, so the type is hand-written and\n * the schema is typed `z.ZodType<Note>` via `z.lazy` (all fields are\n * optional, hence input ≡ output and the annotation is sound).\n */\nexport interface Note {\n /** Pitch. Omitted for rests, sustains, and barlines. */\n svara?: Svara;\n /** কোমল (flat). */\n komal?: boolean;\n /** তীব্র / কড়ি (sharp — applies to ma). */\n tivra?: boolean;\n /** Sub-komal microtone (legend: অল্পকোমল / অতিকোমল). */\n microtone?: Microtone;\n /** Duration in মাত্রা (beats): 1 (default), 0.5, 0.25, 2, … */\n durationMatra?: number;\n /**\n * আ-কার: no new syllable attack. Alone (no `svara`) it holds the previous\n * note's pitch and vowel; combined with `svara` it is a melisma — the\n * pitch moves while the previous syllable's vowel continues (Swarabitan\n * writes these with a leading hyphen, e.g. `-sfa`).\n */\n sustain?: boolean;\n /** বিরাম: a rest of `durationMatra` beats. */\n rest?: boolean;\n /** কণ স্বর: a grace note attached before this note. */\n kan?: Svara;\n /** মীড় (glide/slur) endpoint. */\n meend?: 'start' | 'end';\n /** Barline. A bar token usually has no `svara`. */\n bar?: Bar;\n /** Repeat-bracket edges opening/closing on this token. */\n brackets?: Bracket[];\n /** Lyric syllable aligned under this note */\n lyric?: string;\n /** Lossless passthrough of the source cell (e.g. raw Swarabitan code). */\n raw?: string;\n /**\n * Annotation notes rendered above this column: alt-on-repeat passages\n * (legend: পরিবর্তিত স্বর in [ ] শিরোদেশে), stop marks, beat numbers.\n */\n above?: Note[];\n /** Annotation notes rendered below this column. */\n below?: Note[];\n}\n\nexport const noteSchema: z.ZodType<Note> = z.lazy(() =>\n z\n .object({\n svara: svaraSchema.optional(),\n komal: z.boolean().optional(),\n tivra: z.boolean().optional(),\n microtone: microtoneSchema.optional(),\n durationMatra: z.number().positive().optional(),\n sustain: z.boolean().optional(),\n rest: z.boolean().optional(),\n kan: svaraSchema.optional(),\n meend: z.enum(['start', 'end']).optional(),\n bar: barSchema.optional(),\n brackets: z.array(bracketSchema).optional(),\n lyric: z.string().optional(),\n raw: z.string().optional(),\n above: z.array(noteSchema).optional(),\n below: z.array(noteSchema).optional(),\n })\n .refine(\n (n) =>\n n.svara !== undefined ||\n n.rest === true ||\n n.sustain === true ||\n n.bar !== undefined ||\n n.raw !== undefined ||\n (n.brackets !== undefined && n.brackets.length > 0) ||\n (n.above !== undefined && n.above.length > 0) ||\n (n.below !== undefined && n.below.length > 0) ||\n n.lyric !== undefined,\n {\n message:\n 'note must carry one of: svara, rest, sustain, bar, raw, lyric, brackets, or a non-empty above/below',\n },\n ),\n);\n\n/** A written line of the song: a sequence of note tokens. */\nexport const rowSchema = z.object({\n /** Optional line label (e.g. a tuk/section marker). */\n label: z.string().optional(),\n notes: z.array(noteSchema),\n});\nexport type Row = z.infer<typeof rowSchema>;\n\n/** A structural section: আস্থায়ী / অন্তরা / সঞ্চারী / আভোগ, or free text. */\nexport const partSchema = z.object({\n name: z.string().optional(),\n rows: z.array(rowSchema),\n});\nexport type Part = z.infer<typeof partSchema>;\n\n/**\n * Taal definition. `numBeats` is the cycle length in মাত্রা; `bhaags` (if\n * present) must sum to `numBeats`; `sam`/`khaali` are 0-based beat indices.\n */\nexport const taalSchema = z\n .object({\n /** Player sample key, e.g. `dadra`, `teentaal`. */\n id: z.string(),\n numBeats: z.number().int().positive(),\n /** Vibhag groupings; if given, they sum to numBeats. */\n bhaags: z.array(z.number().int().positive()).optional(),\n /** Sam (cycle start) beat index, 0-based. */\n sam: z.number().int().nonnegative().optional(),\n /** Khaali (wave) beat indices, 0-based. */\n khaali: z.array(z.number().int().nonnegative()).optional(),\n })\n .refine((t) => t.bhaags === undefined || t.bhaags.reduce((a, b) => a + b, 0) === t.numBeats, {\n message: 'bhaags must sum to numBeats',\n });\nexport type Taal = z.infer<typeof taalSchema>;\n\n/** Document-level metadata. */\nexport const metaSchema = z.object({\n title: z.string(),\n /** Cross-reference to a gitabitan.io song content id (filename, immutable). */\n songId: z.string().optional(),\n /** Source NLTR node/song id. */\n nltrId: z.number().int().optional(),\n taal: taalSchema.optional(),\n /**\n * The taal name exactly as printed in the source (e.g. `তালমুক্ত`,\n * `ষষ্ঠী(২/৪)`). Always set by the NLTR converter; `taal` is set only\n * when the name resolves to a known definition.\n */\n taalName: z.string().optional(),\n /** Base pitch for playback, e.g. `C`, `C#`, or the player's `cs` form. */\n tonic: z.string().optional(),\n /** Default playback tempo in matra/min. Player-only — the viewer ignores it.\n * The player adopts it on `load()` (precedence: constructor `bpm` → `setBpm`\n * tweak → this → 90). `null` is the converter's blank placeholder = unset. */\n bpm: z.number().positive().nullable().optional(),\n raag: z.string().optional(),\n /** আবর্তন: number of taal cycles, when the source states it. */\n avartan: z.number().int().positive().optional(),\n /** স্বরলিপিকার (notation author). */\n notationBy: z.string().optional(),\n /** Provenance note or URL. */\n source: z.string().optional(),\n});\nexport type Meta = z.infer<typeof metaSchema>;\n\n/** A complete swaralipi document. */\nexport const swaralipiSchema = z.object({\n /** Spec version this document targets (see SPEC_VERSION in ./index). */\n version: z.string(),\n meta: metaSchema,\n parts: z.array(partSchema),\n});\nexport type Swaralipi = z.infer<typeof swaralipiSchema>;\n","import type { Taal } from './schema.js';\n\n/**\n * Reference definitions for the taals the player will sample (P2.3):\n * adachautaal, dadra, ektaal, jhaptaal, kehrwa, rupak, teentaal.\n *\n * `numBeats` and the `bhaags` given below are standard Hindustani taal theory.\n * `bhaags` is omitted where a single canonical division isn't well-agreed\n * (adachautaal) — we assert only what's uncontested. `sam` is beat 0 for all.\n */\nexport const TAALS = {\n dadra: { id: 'dadra', numBeats: 6, bhaags: [3, 3], sam: 0, khaali: [3] },\n kehrwa: { id: 'kehrwa', numBeats: 8, bhaags: [4, 4], sam: 0, khaali: [4] },\n rupak: { id: 'rupak', numBeats: 7, bhaags: [3, 2, 2], sam: 0, khaali: [0] },\n jhaptaal: { id: 'jhaptaal', numBeats: 10, bhaags: [2, 3, 2, 3], sam: 0, khaali: [5] },\n ektaal: { id: 'ektaal', numBeats: 12, bhaags: [2, 2, 2, 2, 2, 2], sam: 0, khaali: [2, 6] },\n adachautaal: { id: 'adachautaal', numBeats: 14, sam: 0 },\n teentaal: { id: 'teentaal', numBeats: 16, bhaags: [4, 4, 4, 4], sam: 0, khaali: [8] },\n} as const satisfies Record<string, Taal>;\n\nexport type TaalId = keyof typeof TAALS;\n","/**\n * @ugfoundation/swaralipi-js/spec\n *\n * The swaralipi JSON spec: Zod schemas, inferred TS types, and parse helpers.\n */\nimport { swaralipiSchema, type Swaralipi } from './schema.js';\n\n/** Current spec version. Documents declare the version they target. */\nexport const SPEC_VERSION = '0.1.0';\n\nexport {\n octaveSchema,\n svaraLetterSchema,\n svaraSchema,\n microtoneSchema,\n barSchema,\n bracketSchema,\n noteSchema,\n rowSchema,\n partSchema,\n taalSchema,\n metaSchema,\n swaralipiSchema,\n} from './schema.js';\n\nexport type {\n Octave,\n SvaraLetter,\n Svara,\n Microtone,\n Bar,\n Bracket,\n Note,\n Row,\n Part,\n Taal,\n Meta,\n Swaralipi,\n} from './schema.js';\n\nexport { TAALS, type TaalId } from './taals.js';\n\n/** Parse + validate unknown data into a `Swaralipi`. Throws `ZodError` on failure. */\nexport function parseSwaralipi(data: unknown): Swaralipi {\n return swaralipiSchema.parse(data);\n}\n\n/** Non-throwing variant: returns Zod's `{ success, data | error }` result. */\nexport function safeParseSwaralipi(data: unknown) {\n return swaralipiSchema.safeParse(data);\n}\n"]}
1
+ {"version":3,"sources":["../../src/spec/schema.ts","../../src/spec/taals.ts","../../src/spec/index.ts"],"names":["z"],"mappings":"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","file":"index.cjs","sourcesContent":["import { z } from 'zod';\n\n/**\n * swaralipi-js JSON spec — Zod schema + inferred types.\n\n/** Octave registers */\nexport const octaveSchema = z.enum([\n 'ati-mandra', // very low\n 'mandra', // low (dot below)\n 'madhyam', // middle\n 'taar', // high (ref/dot above)\n 'ati-taar', // very high\n]);\nexport type Octave = z.infer<typeof octaveSchema>;\n\n/**\n * The seven shuddha svara letters:\n * `d` = ধৈবত (dha), `n` = নিষাদ (ni). Komal/tivra are flags, not letters.\n */\nexport const svaraLetterSchema = z.enum(['s', 'r', 'g', 'm', 'p', 'd', 'n']);\nexport type SvaraLetter = z.infer<typeof svaraLetterSchema>;\n\n/** A pitch as `[octave, letter]` */\nexport const svaraSchema = z.tuple([octaveSchema, svaraLetterSchema]);\nexport type Svara = z.infer<typeof svaraSchema>;\n\n/** Microtone variants below komal (legend: অল্পকোমল / অতিকোমল). */\nexport const microtoneSchema = z.enum(['alpakomal', 'atikomal']);\nexport type Microtone = z.infer<typeof microtoneSchema>;\n\n/**\n * Barline weights. Swarabitan distinguishes the light দাঁড়ি (।) that\n * separates vibhags *within* a taal cycle from the দণ্ড (danda, I) strokes:\n * - `dari` — । vibhag separator inside the cycle\n * - `single` — I end of one taal cycle (ফেরা)\n * - `double` — II section (kali) boundary / return-to-asthayi marker\n * - `quad` — IIII end of the song\n */\nexport const barSchema = z.enum(['dari', 'single', 'double', 'quad']);\nexport type Bar = z.infer<typeof barSchema>;\n\n/**\n * A repeat-bracket edge. Brackets span a range of notes; the opening note\n * carries `{ ..., edge: 'open' }` and the closing note `{ ..., edge: 'close' }`.\n * kind: `repeat` = {} গুন্ডবন্ধনী, `skip` = () বক্রবন্ধনী (omit on repeat),\n * `alt` = [] সরল বন্ধনী (changed notes on repeat).\n */\nexport const bracketSchema = z.object({\n kind: z.enum(['repeat', 'skip', 'alt']),\n edge: z.enum(['open', 'close']),\n});\nexport type Bracket = z.infer<typeof bracketSchema>;\n\n/**\n * A single token in a row. A token is one of: a pitched note (`svara`),\n * a rest (`rest`), an আ-কার sustain (`sustain`), a barline (`bar`), or a\n * purely raw/undecoded cell (`raw`) — possibly carrying annotations\n * (`above`/`below`) or a lyric syllable on an otherwise empty column.\n * The `.refine` enforces that a note carries at least one of these so\n * truly empty tokens can't slip through.\n *\n * `above`/`below` make `Note` recursive, so the type is hand-written and\n * the schema is typed `z.ZodType<Note>` via `z.lazy` (all fields are\n * optional, hence input ≡ output and the annotation is sound).\n */\nexport interface Note {\n /** Pitch. Omitted for rests, sustains, and barlines. */\n svara?: Svara;\n /** কোমল (flat). */\n komal?: boolean;\n /** তীব্র / কড়ি (sharp — applies to ma). */\n tivra?: boolean;\n /** Sub-komal microtone (legend: অল্পকোমল / অতিকোমল). */\n microtone?: Microtone;\n /** Duration in মাত্রা (beats): 1 (default), 0.5, 0.25, 2, … */\n durationMatra?: number;\n /**\n * আ-কার: no new syllable attack. Alone (no `svara`) it holds the previous\n * note's pitch and vowel; combined with `svara` it is a melisma — the\n * pitch moves while the previous syllable's vowel continues (Swarabitan\n * writes these with a leading hyphen, e.g. `-sfa`).\n */\n sustain?: boolean;\n /** বিরাম: a rest of `durationMatra` beats. */\n rest?: boolean;\n /** কণ স্বর: a grace note attached before this note. */\n kan?: Svara;\n /** মীড় (glide/slur) endpoint. */\n meend?: 'start' | 'end';\n /** Barline. A bar token usually has no `svara`. */\n bar?: Bar;\n /** Repeat-bracket edges opening/closing on this token. */\n brackets?: Bracket[];\n /** Lyric syllable aligned under this note */\n lyric?: string;\n /** Lossless passthrough of the source cell (e.g. raw Swarabitan code). */\n raw?: string;\n /**\n * Annotation notes rendered above this column: alt-on-repeat passages\n * (legend: পরিবর্তিত স্বর in [ ] শিরোদেশে), stop marks, beat numbers.\n */\n above?: Note[];\n /** Annotation notes rendered below this column. */\n below?: Note[];\n}\n\nexport const noteSchema: z.ZodType<Note> = z.lazy(() =>\n z\n .object({\n svara: svaraSchema.optional(),\n komal: z.boolean().optional(),\n tivra: z.boolean().optional(),\n microtone: microtoneSchema.optional(),\n durationMatra: z.number().positive().optional(),\n sustain: z.boolean().optional(),\n rest: z.boolean().optional(),\n kan: svaraSchema.optional(),\n meend: z.enum(['start', 'end']).optional(),\n bar: barSchema.optional(),\n brackets: z.array(bracketSchema).optional(),\n lyric: z.string().optional(),\n raw: z.string().optional(),\n above: z.array(noteSchema).optional(),\n below: z.array(noteSchema).optional(),\n })\n .refine(\n (n) =>\n n.svara !== undefined ||\n n.rest === true ||\n n.sustain === true ||\n n.bar !== undefined ||\n n.raw !== undefined ||\n (n.brackets !== undefined && n.brackets.length > 0) ||\n (n.above !== undefined && n.above.length > 0) ||\n (n.below !== undefined && n.below.length > 0) ||\n n.lyric !== undefined,\n {\n message:\n 'note must carry one of: svara, rest, sustain, bar, raw, lyric, brackets, or a non-empty above/below',\n },\n ),\n);\n\n/** A written line of the song: a sequence of note tokens. */\nexport const rowSchema = z.object({\n /** Optional line label (e.g. a tuk/section marker). */\n label: z.string().optional(),\n notes: z.array(noteSchema),\n});\nexport type Row = z.infer<typeof rowSchema>;\n\n/** A structural section: আস্থায়ী / অন্তরা / সঞ্চারী / আভোগ, or free text. */\nexport const partSchema = z.object({\n name: z.string().optional(),\n rows: z.array(rowSchema),\n});\nexport type Part = z.infer<typeof partSchema>;\n\n/**\n * Taal definition. `numBeats` is the cycle length in মাত্রা; `bhaags` (if\n * present) must sum to `numBeats`; `sam`/`khaali` are 0-based beat indices.\n */\nexport const taalSchema = z\n .object({\n /** Player sample key, e.g. `dadra`, `teentaal`. */\n id: z.string(),\n /**\n * Which tabla loop variation to play, e.g. `pro` (CDN dir suffix). Optional\n * and additive — omitted means the taal's default variation, so existing\n * docs are unaffected. The player honors it but never exposes a variation\n * picker; selecting a non-default variation is the consumer's premium policy.\n */\n variation: z.string().optional(),\n numBeats: z.number().int().positive(),\n /** Vibhag groupings; if given, they sum to numBeats. */\n bhaags: z.array(z.number().int().positive()).optional(),\n /** Sam (cycle start) beat index, 0-based. */\n sam: z.number().int().nonnegative().optional(),\n /** Khaali (wave) beat indices, 0-based. */\n khaali: z.array(z.number().int().nonnegative()).optional(),\n })\n .refine((t) => t.bhaags === undefined || t.bhaags.reduce((a, b) => a + b, 0) === t.numBeats, {\n message: 'bhaags must sum to numBeats',\n });\nexport type Taal = z.infer<typeof taalSchema>;\n\n/** Document-level metadata. */\nexport const metaSchema = z.object({\n title: z.string(),\n /** Cross-reference to a gitabitan.io song content id (filename, immutable). */\n songId: z.string().optional(),\n /** Source NLTR node/song id. */\n nltrId: z.number().int().optional(),\n taal: taalSchema.optional(),\n /**\n * The taal name exactly as printed in the source (e.g. `তালমুক্ত`,\n * `ষষ্ঠী(২/৪)`). Always set by the NLTR converter; `taal` is set only\n * when the name resolves to a known definition.\n */\n taalName: z.string().optional(),\n /** Base pitch for playback, e.g. `C`, `C#`, or the player's `cs` form. */\n tonic: z.string().optional(),\n /** Default playback tempo in matra/min. Player-only — the viewer ignores it.\n * The player adopts it on `load()` (precedence: constructor `bpm` → `setBpm`\n * tweak → this → 90). `null` is the converter's blank placeholder = unset. */\n bpm: z.number().positive().nullable().optional(),\n raag: z.string().optional(),\n /** আবর্তন: number of taal cycles, when the source states it. */\n avartan: z.number().int().positive().optional(),\n /** স্বরলিপিকার (notation author). */\n notationBy: z.string().optional(),\n /** Provenance note or URL. */\n source: z.string().optional(),\n});\nexport type Meta = z.infer<typeof metaSchema>;\n\n/** A complete swaralipi document. */\nexport const swaralipiSchema = z.object({\n /** Spec version this document targets (see SPEC_VERSION in ./index). */\n version: z.string(),\n meta: metaSchema,\n parts: z.array(partSchema),\n});\nexport type Swaralipi = z.infer<typeof swaralipiSchema>;\n","import type { Taal } from './schema.js';\n\n/**\n * Reference definitions for the taals the player will sample:\n * adachautaal, dadra, ektaal, jhaptaal, kehrwa, rupak, shashthi, teentaal.\n *\n * `numBeats` and the `bhaags` given below are standard Hindustani taal theory.\n * `bhaags` is omitted where a single canonical division isn't well-agreed\n * (adachautaal) — we assert only what's uncontested. `sam` is beat 0 for all.\n *\n * Tabla loops live under `tabla/<id>/` by default; per-taal variation and\n * skip-bpm overrides (e.g. shashthi → `tabla/shashthi-pro/`) are in\n * instruments.ts's `TABLA_VARIATIONS`.\n */\nexport const TAALS = {\n dadra: { id: 'dadra', numBeats: 6, bhaags: [3, 3], sam: 0, khaali: [3] },\n kehrwa: { id: 'kehrwa', numBeats: 8, bhaags: [4, 4], sam: 0, khaali: [4] },\n rupak: { id: 'rupak', numBeats: 7, bhaags: [3, 2, 2], sam: 0, khaali: [0] },\n jhaptaal: { id: 'jhaptaal', numBeats: 10, bhaags: [2, 3, 2, 3], sam: 0, khaali: [5] },\n ektaal: { id: 'ektaal', numBeats: 12, bhaags: [2, 2, 2, 2, 2, 2], sam: 0, khaali: [2, 6] },\n adachautaal: { id: 'adachautaal', numBeats: 14, sam: 0 },\n shashthi: { id: 'shashthi', numBeats: 6, bhaags: [2, 4], sam: 0 }, // ষষ্ঠী\n teentaal: { id: 'teentaal', numBeats: 16, bhaags: [4, 4, 4, 4], sam: 0, khaali: [8] },\n} as const satisfies Record<string, Taal>;\n\nexport type TaalId = keyof typeof TAALS;\n","/**\n * @ugfoundation/swaralipi-js/spec\n *\n * The swaralipi JSON spec: Zod schemas, inferred TS types, and parse helpers.\n */\nimport { swaralipiSchema, type Swaralipi } from './schema.js';\n\n/** Current spec version. Documents declare the version they target. */\nexport const SPEC_VERSION = '0.1.2';\n\nexport {\n octaveSchema,\n svaraLetterSchema,\n svaraSchema,\n microtoneSchema,\n barSchema,\n bracketSchema,\n noteSchema,\n rowSchema,\n partSchema,\n taalSchema,\n metaSchema,\n swaralipiSchema,\n} from './schema.js';\n\nexport type {\n Octave,\n SvaraLetter,\n Svara,\n Microtone,\n Bar,\n Bracket,\n Note,\n Row,\n Part,\n Taal,\n Meta,\n Swaralipi,\n} from './schema.js';\n\nexport { TAALS, type TaalId } from './taals.js';\n\n/** Parse + validate unknown data into a `Swaralipi`. Throws `ZodError` on failure. */\nexport function parseSwaralipi(data: unknown): Swaralipi {\n return swaralipiSchema.parse(data);\n}\n\n/** Non-throwing variant: returns Zod's `{ success, data | error }` result. */\nexport function safeParseSwaralipi(data: unknown) {\n return swaralipiSchema.safeParse(data);\n}\n"]}
@@ -1,10 +1,10 @@
1
1
  import * as zod from 'zod';
2
- import { S as Swaralipi, N as Note } from '../schema-gxhG45OK.cjs';
3
- export { B as Bar, b as Bracket, M as Meta, c as Microtone, O as Octave, P as Part, R as Row, d as Svara, a as SvaraLetter, T as Taal, e as barSchema, f as bracketSchema, m as metaSchema, g as microtoneSchema, n as noteSchema, o as octaveSchema, p as partSchema, r as rowSchema, s as svaraLetterSchema, h as svaraSchema, i as swaralipiSchema, t as taalSchema } from '../schema-gxhG45OK.cjs';
4
- export { a as TAALS, T as TaalId } from '../taals-DguYW0wf.cjs';
2
+ import { S as Swaralipi, N as Note } from '../schema-D3wyNRqM.cjs';
3
+ export { B as Bar, b as Bracket, M as Meta, c as Microtone, O as Octave, P as Part, R as Row, d as Svara, a as SvaraLetter, T as Taal, e as barSchema, f as bracketSchema, m as metaSchema, g as microtoneSchema, n as noteSchema, o as octaveSchema, p as partSchema, r as rowSchema, s as svaraLetterSchema, h as svaraSchema, i as swaralipiSchema, t as taalSchema } from '../schema-D3wyNRqM.cjs';
4
+ export { a as TAALS, T as TaalId } from '../taals-B5RcMMIt.cjs';
5
5
 
6
6
  /** Current spec version. Documents declare the version they target. */
7
- declare const SPEC_VERSION = "0.1.0";
7
+ declare const SPEC_VERSION = "0.1.2";
8
8
 
9
9
  /** Parse + validate unknown data into a `Swaralipi`. Throws `ZodError` on failure. */
10
10
  declare function parseSwaralipi(data: unknown): Swaralipi;
@@ -18,6 +18,7 @@ declare function safeParseSwaralipi(data: unknown): zod.SafeParseReturnType<{
18
18
  taal?: {
19
19
  id: string;
20
20
  numBeats: number;
21
+ variation?: string | undefined;
21
22
  bhaags?: number[] | undefined;
22
23
  sam?: number | undefined;
23
24
  khaali?: number[] | undefined;
@@ -46,6 +47,7 @@ declare function safeParseSwaralipi(data: unknown): zod.SafeParseReturnType<{
46
47
  taal?: {
47
48
  id: string;
48
49
  numBeats: number;
50
+ variation?: string | undefined;
49
51
  bhaags?: number[] | undefined;
50
52
  sam?: number | undefined;
51
53
  khaali?: number[] | undefined;
@@ -1,10 +1,10 @@
1
1
  import * as zod from 'zod';
2
- import { S as Swaralipi, N as Note } from '../schema-gxhG45OK.js';
3
- export { B as Bar, b as Bracket, M as Meta, c as Microtone, O as Octave, P as Part, R as Row, d as Svara, a as SvaraLetter, T as Taal, e as barSchema, f as bracketSchema, m as metaSchema, g as microtoneSchema, n as noteSchema, o as octaveSchema, p as partSchema, r as rowSchema, s as svaraLetterSchema, h as svaraSchema, i as swaralipiSchema, t as taalSchema } from '../schema-gxhG45OK.js';
4
- export { a as TAALS, T as TaalId } from '../taals-DguYW0wf.js';
2
+ import { S as Swaralipi, N as Note } from '../schema-D3wyNRqM.js';
3
+ export { B as Bar, b as Bracket, M as Meta, c as Microtone, O as Octave, P as Part, R as Row, d as Svara, a as SvaraLetter, T as Taal, e as barSchema, f as bracketSchema, m as metaSchema, g as microtoneSchema, n as noteSchema, o as octaveSchema, p as partSchema, r as rowSchema, s as svaraLetterSchema, h as svaraSchema, i as swaralipiSchema, t as taalSchema } from '../schema-D3wyNRqM.js';
4
+ export { a as TAALS, T as TaalId } from '../taals-B5RcMMIt.js';
5
5
 
6
6
  /** Current spec version. Documents declare the version they target. */
7
- declare const SPEC_VERSION = "0.1.0";
7
+ declare const SPEC_VERSION = "0.1.2";
8
8
 
9
9
  /** Parse + validate unknown data into a `Swaralipi`. Throws `ZodError` on failure. */
10
10
  declare function parseSwaralipi(data: unknown): Swaralipi;
@@ -18,6 +18,7 @@ declare function safeParseSwaralipi(data: unknown): zod.SafeParseReturnType<{
18
18
  taal?: {
19
19
  id: string;
20
20
  numBeats: number;
21
+ variation?: string | undefined;
21
22
  bhaags?: number[] | undefined;
22
23
  sam?: number | undefined;
23
24
  khaali?: number[] | undefined;
@@ -46,6 +47,7 @@ declare function safeParseSwaralipi(data: unknown): zod.SafeParseReturnType<{
46
47
  taal?: {
47
48
  id: string;
48
49
  numBeats: number;
50
+ variation?: string | undefined;
49
51
  bhaags?: number[] | undefined;
50
52
  sam?: number | undefined;
51
53
  khaali?: number[] | undefined;
@@ -1,4 +1,4 @@
1
- export { SPEC_VERSION, barSchema, bracketSchema, metaSchema, microtoneSchema, noteSchema, octaveSchema, parseSwaralipi, partSchema, rowSchema, safeParseSwaralipi, svaraLetterSchema, svaraSchema, swaralipiSchema, taalSchema } from '../chunk-C6O7DYU5.js';
2
- export { TAALS } from '../chunk-GWXI2HJA.js';
1
+ export { SPEC_VERSION, barSchema, bracketSchema, metaSchema, microtoneSchema, noteSchema, octaveSchema, parseSwaralipi, partSchema, rowSchema, safeParseSwaralipi, svaraLetterSchema, svaraSchema, swaralipiSchema, taalSchema } from '../chunk-LN463EEN.js';
2
+ export { TAALS } from '../chunk-VCXQJ2GB.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
@@ -1,10 +1,14 @@
1
1
  /**
2
- * Reference definitions for the taals the player will sample (P2.3):
3
- * adachautaal, dadra, ektaal, jhaptaal, kehrwa, rupak, teentaal.
2
+ * Reference definitions for the taals the player will sample:
3
+ * adachautaal, dadra, ektaal, jhaptaal, kehrwa, rupak, shashthi, teentaal.
4
4
  *
5
5
  * `numBeats` and the `bhaags` given below are standard Hindustani taal theory.
6
6
  * `bhaags` is omitted where a single canonical division isn't well-agreed
7
7
  * (adachautaal) — we assert only what's uncontested. `sam` is beat 0 for all.
8
+ *
9
+ * Tabla loops live under `tabla/<id>/` by default; per-taal variation and
10
+ * skip-bpm overrides (e.g. shashthi → `tabla/shashthi-pro/`) are in
11
+ * instruments.ts's `TABLA_VARIATIONS`.
8
12
  */
9
13
  declare const TAALS: {
10
14
  readonly dadra: {
@@ -47,6 +51,12 @@ declare const TAALS: {
47
51
  readonly numBeats: 14;
48
52
  readonly sam: 0;
49
53
  };
54
+ readonly shashthi: {
55
+ readonly id: "shashthi";
56
+ readonly numBeats: 6;
57
+ readonly bhaags: [2, 4];
58
+ readonly sam: 0;
59
+ };
50
60
  readonly teentaal: {
51
61
  readonly id: "teentaal";
52
62
  readonly numBeats: 16;
@@ -1,10 +1,14 @@
1
1
  /**
2
- * Reference definitions for the taals the player will sample (P2.3):
3
- * adachautaal, dadra, ektaal, jhaptaal, kehrwa, rupak, teentaal.
2
+ * Reference definitions for the taals the player will sample:
3
+ * adachautaal, dadra, ektaal, jhaptaal, kehrwa, rupak, shashthi, teentaal.
4
4
  *
5
5
  * `numBeats` and the `bhaags` given below are standard Hindustani taal theory.
6
6
  * `bhaags` is omitted where a single canonical division isn't well-agreed
7
7
  * (adachautaal) — we assert only what's uncontested. `sam` is beat 0 for all.
8
+ *
9
+ * Tabla loops live under `tabla/<id>/` by default; per-taal variation and
10
+ * skip-bpm overrides (e.g. shashthi → `tabla/shashthi-pro/`) are in
11
+ * instruments.ts's `TABLA_VARIATIONS`.
8
12
  */
9
13
  declare const TAALS: {
10
14
  readonly dadra: {
@@ -47,6 +51,12 @@ declare const TAALS: {
47
51
  readonly numBeats: 14;
48
52
  readonly sam: 0;
49
53
  };
54
+ readonly shashthi: {
55
+ readonly id: "shashthi";
56
+ readonly numBeats: 6;
57
+ readonly bhaags: [2, 4];
58
+ readonly sam: 0;
59
+ };
50
60
  readonly teentaal: {
51
61
  readonly id: "teentaal";
52
62
  readonly numBeats: 16;
@@ -70,6 +70,13 @@ var init_schema = __esm({
70
70
  taalSchema = zod.z.object({
71
71
  /** Player sample key, e.g. `dadra`, `teentaal`. */
72
72
  id: zod.z.string(),
73
+ /**
74
+ * Which tabla loop variation to play, e.g. `pro` (CDN dir suffix). Optional
75
+ * and additive — omitted means the taal's default variation, so existing
76
+ * docs are unaffected. The player honors it but never exposes a variation
77
+ * picker; selecting a non-default variation is the consumer's premium policy.
78
+ */
79
+ variation: zod.z.string().optional(),
73
80
  numBeats: zod.z.number().int().positive(),
74
81
  /** Vibhag groupings; if given, they sum to numBeats. */
75
82
  bhaags: zod.z.array(zod.z.number().int().positive()).optional(),
@@ -127,6 +134,8 @@ var init_taals = __esm({
127
134
  jhaptaal: { id: "jhaptaal", numBeats: 10, bhaags: [2, 3, 2, 3], sam: 0, khaali: [5] },
128
135
  ektaal: { id: "ektaal", numBeats: 12, bhaags: [2, 2, 2, 2, 2, 2], sam: 0, khaali: [2, 6] },
129
136
  adachautaal: { id: "adachautaal", numBeats: 14, sam: 0 },
137
+ shashthi: { id: "shashthi", numBeats: 6, bhaags: [2, 4], sam: 0 },
138
+ // ষষ্ঠী
130
139
  teentaal: { id: "teentaal", numBeats: 16, bhaags: [4, 4, 4, 4], sam: 0, khaali: [8] }
131
140
  };
132
141
  }
@@ -164,7 +173,7 @@ var init_spec = __esm({
164
173
  init_schema();
165
174
  init_schema();
166
175
  init_taals();
167
- SPEC_VERSION = "0.1.0";
176
+ SPEC_VERSION = "0.1.2";
168
177
  }
169
178
  });
170
179