or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

configuration-settings.mdduration-formatting.mdindex.mdlocalization.mdmultiple-duration-formatting.mdtemplate-system.md

configuration-settings.mddocs/

0

# Configuration Settings

1

2

Comprehensive settings system providing fine-grained control over formatting behavior, including trimming, precision, localization, value ranges, and output formatting.

3

4

## Capabilities

5

6

### Settings Object Interface

7

8

Complete configuration interface for customizing duration formatting behavior.

9

10

```javascript { .api }

11

/**

12

* Settings object for duration formatting

13

* All properties are optional with intelligent defaults

14

*/

15

interface FormatSettings {

16

// Core formatting

17

template?: string | function;

18

precision?: number;

19

20

// Trimming control

21

trim?: string | boolean | null;

22

stopTrim?: string | string[] | null;

23

largest?: number | null;

24

25

// Value processing

26

trunc?: boolean;

27

forceLength?: boolean | null;

28

useSignificantDigits?: boolean;

29

30

// Value range limits

31

minValue?: number | null;

32

maxValue?: number | null;

33

34

// Localization

35

userLocale?: string | null;

36

usePlural?: boolean;

37

useLeftUnits?: boolean;

38

useToLocaleString?: boolean;

39

useGrouping?: boolean;

40

41

// Fallback number formatting

42

groupingSeparator?: string;

43

decimalSeparator?: string;

44

grouping?: number[];

45

}

46

```

47

48

## Core Formatting Settings

49

50

### Template

51

52

Controls the format pattern used for output generation.

53

54

```javascript { .api }

55

template?: string | function;

56

// Default: defaultFormatTemplate function

57

```

58

59

**Usage Examples:**

60

61

```javascript

62

// String templates

63

moment.duration(3661, "seconds").format({ template: "h:mm:ss" });

64

// "1:01:01"

65

66

// Function templates

67

function customTemplate() {

68

return this.duration.asSeconds() > 3600 ? "h [hours]" : "m [minutes]";

69

}

70

71

moment.duration(3661, "seconds").format({ template: customTemplate });

72

// "1 hour"

73

```

74

75

### Precision

76

77

Controls decimal places (positive) or integer truncation (negative).

78

79

```javascript { .api }

80

precision?: number;

81

// Default: 0

82

```

83

84

**Usage Examples:**

85

86

```javascript

87

var duration = moment.duration(3661, "seconds");

88

89

// Positive precision: decimal places

90

duration.format({ template: "h [hours]", precision: 0 }); // "1 hour"

91

duration.format({ template: "h [hours]", precision: 1 }); // "1.0 hours"

92

duration.format({ template: "h [hours]", precision: 2 }); // "1.02 hours"

93

94

// Negative precision: integer truncation

95

moment.duration(1234, "seconds").format({

96

template: "s [seconds]",

97

precision: -1

98

}); // "1230 seconds"

99

100

moment.duration(1234, "seconds").format({

101

template: "s [seconds]",

102

precision: -2

103

}); // "1200 seconds"

104

```

105

106

## Trimming Control Settings

107

108

### Trim

109

110

Controls which zero-value tokens are removed from output.

111

112

```javascript { .api }

113

trim?: string | boolean | null;

114

// Default: null (treated as "large")

115

// Values: "large", "small", "both", "mid", "final", "all",

116

// "left", "right", true, false, null

117

```

118

119

**Usage Examples:**

120

121

```javascript

122

var duration = moment.duration(123, "minutes");

123

124

// "large" - trim largest-magnitude zeros (default)

125

duration.format({ template: "d[d] h:mm:ss", trim: "large" });

126

// "2:03:00"

127

128

// "small" - trim smallest-magnitude zeros

129

duration.format({ template: "d[d] h:mm:ss", trim: "small" });

130

// "0d 2:03"

131

132

// "both" - trim both ends

133

duration.format({ template: "d[d] h[h] m[m] s[s]", trim: "both" });

134

// "2h 3m"

135

136

// "mid" - trim middle zeros

137

moment.duration(1441, "minutes").format({

138

template: "w[w] d[d] h[h] m[m] s[s]",

139

trim: "mid"

140

});

141

// "0w 1d 1m 0s"

142

143

// "final" - trim final zero

144

moment.duration(0, "minutes").format({

145

template: "d[d] h:mm:ss",

146

trim: "large final"

147

});

148

// ""

149

150

// "all" - shorthand for "both mid final"

151

moment.duration(0, "minutes").format({

152

template: "d[d] h[h] m[m] s[s]",

153

trim: "all"

154

});

155

// ""

156

157

// false - no trimming

158

duration.format({ template: "d[d] h:mm:ss", trim: false });

159

// "0d 2:03:00"

160

```

161

162

### Stop Trim

163

164

Specifies tokens where trimming should stop.

165

166

```javascript { .api }

167

stopTrim?: string | string[] | null;

168

// Default: null

169

// Accepts moment token strings individually or in arrays

170

```

171

172

**Usage Examples:**

173

174

```javascript

175

var duration = moment.duration(23, "minutes");

176

177

// Single token

178

duration.format({

179

template: "d[d] h:mm:ss",

180

stopTrim: "h"

181

});

182

// "0:23:00"

183

184

// Multiple tokens as string

185

moment.duration(2, "hours").format({

186

template: "y [years], d [days], h [hours], m [minutes], s [seconds]",

187

trim: "both",

188

stopTrim: "d m"

189

});

190

// "0 days, 2 hours, 0 minutes"

191

192

// Multiple tokens as array

193

moment.duration(2, "hours").format({

194

template: "y [years], d [days], h [hours], m [minutes], s [seconds]",

195

trim: "both",

196

stopTrim: ["d", "m"]

197

});

198

// "0 days, 2 hours, 0 minutes"

199

```

200

201

### Largest

202

203

Limits output to N largest-magnitude tokens with values.

204

205

```javascript { .api }

206

largest?: number | null;

207

// Default: null

208

// Automatically sets trim to "all" when specified

209

```

210

211

**Usage Examples:**

212

213

```javascript

214

var duration = moment.duration(7322, "seconds"); // 2h 2m 2s

215

216

// Show only 2 largest units

217

duration.format({

218

template: "d [days], h [hours], m [minutes], s [seconds]",

219

largest: 2

220

});

221

// "2 hours, 2 minutes"

222

223

// Interaction with trim setting

224

duration.format({

225

template: "d [days], h [hours], m [minutes], s [seconds]",

226

largest: 3,

227

trim: "both"

228

});

229

// "0 days, 2 hours, 2 minutes"

230

231

// Interaction with stopTrim

232

moment.duration(1216800, "seconds").format({

233

template: "y [years], w [weeks], d [days], h [hours], m [minutes], s [seconds]",

234

largest: 3,

235

trim: "both",

236

stopTrim: "m"

237

});

238

// "2 weeks, 0 days, 2 hours"

239

```

240

241

## Value Processing Settings

242

243

### Trunc

244

245

Controls whether final token values are truncated or rounded.

246

247

```javascript { .api }

248

trunc?: boolean;

249

// Default: false (rounding behavior)

250

```

251

252

**Usage Examples:**

253

254

```javascript

255

var duration = moment.duration(179, "seconds");

256

257

// Default rounding behavior

258

duration.format({ template: "m [minutes]" });

259

// "3 minutes"

260

261

// Truncation behavior

262

duration.format({ template: "m [minutes]", trunc: true });

263

// "2 minutes"

264

265

// With precision

266

moment.duration(3780, "seconds").format({

267

template: "h [hours]",

268

precision: 1,

269

trunc: false

270

});

271

// "1.1 hours"

272

273

moment.duration(3780, "seconds").format({

274

template: "h [hours]",

275

precision: 1,

276

trunc: true

277

});

278

// "1.0 hours"

279

```

280

281

### Force Length

282

283

Forces first token with value to render at full length.

284

285

```javascript { .api }

286

forceLength?: boolean | null;

287

// Default: null (auto-determined by template)

288

```

289

290

**Usage Examples:**

291

292

```javascript

293

var duration = moment.duration(123, "seconds");

294

295

// Default behavior - first token length may be trimmed

296

duration.format({ template: "h:mm:ss" });

297

// "2:03"

298

299

// Force length - first token always full length

300

duration.format({ template: "h:mm:ss", forceLength: true });

301

// "02:03"

302

303

// Compare with explicit token length

304

duration.format({ template: "hh:mm:ss" });

305

// "02:03" (same result, different approach)

306

```

307

308

### Use Significant Digits

309

310

Treats precision as significant digits across all units.

311

312

```javascript { .api }

313

useSignificantDigits?: boolean;

314

// Default: false

315

// Automatically sets trim to "all" when true

316

```

317

318

**Usage Examples:**

319

320

```javascript

321

var duration = moment.duration(99999, "seconds");

322

323

// Regular precision (decimal places on final token)

324

duration.format({

325

template: "d [days], h [hours], m [minutes], s [seconds]",

326

precision: 3

327

});

328

// "1 day, 3 hours, 46 minutes, 39.000 seconds"

329

330

// Significant digits (across all tokens)

331

duration.format({

332

template: "d [days], h [hours], m [minutes], s [seconds]",

333

useSignificantDigits: true,

334

precision: 3

335

});

336

// "1 day, 3 hours, 50 minutes"

337

338

// With truncation

339

duration.format({

340

template: "d [days], h [hours], m [minutes], s [seconds]",

341

useSignificantDigits: true,

342

precision: 5,

343

trunc: true

344

});

345

// "1 day, 3 hours, 46 minutes, 30 seconds"

346

```

347

348

## Value Range Settings

349

350

### Min Value

351

352

Shows "< N units" for small values on least-magnitude token.

353

354

```javascript { .api }

355

minValue?: number | null;

356

// Default: null

357

```

358

359

**Usage Examples:**

360

361

```javascript

362

// Basic min value

363

moment.duration(59, "seconds").format({

364

template: "h [hours], m [minutes]",

365

minValue: 1

366

});

367

// "< 1 minute"

368

369

// With bubbling to larger units

370

moment.duration(59, "seconds").format({

371

template: "m:ss",

372

minValue: 60

373

});

374

// "< 1:00"

375

376

// With negative durations

377

moment.duration(-59, "seconds").format({

378

template: "h [hours], m [minutes]",

379

minValue: 1

380

});

381

// "> -1 minute"

382

383

// With decimal min values

384

moment.duration(89, "seconds").format({

385

template: "m",

386

minValue: 1.5,

387

precision: 1

388

});

389

// "< 1.5"

390

```

391

392

### Max Value

393

394

Shows "> N units" for large values on greatest-magnitude token.

395

396

```javascript { .api }

397

maxValue?: number | null;

398

// Default: null

399

// Automatically sets trim to "all" when specified

400

```

401

402

**Usage Examples:**

403

404

```javascript

405

// Basic max value

406

moment.duration(15, "days").format({

407

template: "w [weeks]",

408

maxValue: 2

409

});

410

// "> 2 weeks"

411

412

// With negative durations

413

moment.duration(-15, "days").format({

414

template: "w [weeks]",

415

maxValue: 2

416

});

417

// "< -2 weeks"

418

419

// With multiple tokens (lesser tokens forced to 0)

420

moment.duration(15.5, "days").format({

421

template: "w [weeks], d [days], h [hours]",

422

maxValue: 2,

423

trim: false,

424

largest: 2

425

});

426

// "> 2 weeks, 0 days"

427

```

428

429

## Localization Settings

430

431

### User Locale

432

433

Specifies locale for numerical formatting (overrides moment locale).

434

435

```javascript { .api }

436

userLocale?: string | null;

437

// Default: null (uses moment.locale())

438

```

439

440

**Usage Examples:**

441

442

```javascript

443

var duration = moment.duration(1234567, "seconds");

444

445

// Default locale formatting

446

duration.format({ template: "m [minutes]", precision: 3 });

447

// "20,576.117 minutes"

448

449

// German locale formatting

450

duration.format({

451

template: "m [minutes]",

452

precision: 3,

453

userLocale: "de-DE"

454

});

455

// "20.576,117 minutes"

456

```

457

458

### Use Plural

459

460

Enables automatic pluralization of unit labels.

461

462

```javascript { .api }

463

usePlural?: boolean;

464

// Default: true

465

```

466

467

**Usage Examples:**

468

469

```javascript

470

// With pluralization (default)

471

moment.duration(1, "minutes").format("m [minutes]");

472

// "1 minute"

473

moment.duration(2, "minutes").format("m [minute]");

474

// "2 minutes"

475

476

// Without pluralization

477

moment.duration(1, "minutes").format({

478

template: "m [minutes]",

479

usePlural: false

480

});

481

// "1 minutes"

482

moment.duration(2, "minutes").format({

483

template: "m [minute]",

484

usePlural: false

485

});

486

// "2 minute"

487

```

488

489

### Use Left Units

490

491

Processes units to the left of tokens instead of right.

492

493

```javascript { .api }

494

useLeftUnits?: boolean;

495

// Default: false

496

```

497

498

**Usage Examples:**

499

500

```javascript

501

var duration = moment.duration(7322, "seconds");

502

503

// Default behavior (units on right)

504

duration.format("h [hours], m [minutes], s [seconds]");

505

// "2 hours, 2 minutes, 2 seconds"

506

507

// Left units behavior

508

duration.format({

509

template: "[hours] h, [minutes] m, [seconds] s",

510

useLeftUnits: true

511

});

512

// "hours 2, minutes 2, seconds 2"

513

514

// With auto-localization

515

duration.format({

516

template: "_ h, _ m, _ s",

517

useLeftUnits: true

518

});

519

// "hrs 2, mins 2, secs 2"

520

```

521

522

### Use Grouping

523

524

Enables digit grouping in numerical output.

525

526

```javascript { .api }

527

useGrouping?: boolean;

528

// Default: true

529

```

530

531

**Usage Examples:**

532

533

```javascript

534

var duration = moment.duration(1234, "seconds");

535

536

// With grouping (default)

537

duration.format("s [seconds]");

538

// "1,234 seconds"

539

540

// Without grouping

541

duration.format({

542

template: "s [seconds]",

543

useGrouping: false

544

});

545

// "1234 seconds"

546

```

547

548

## Fallback Number Formatting Settings

549

550

Used when native `toLocaleString` or `Intl.NumberFormat` are unavailable or disabled.

551

552

### Use To Locale String

553

554

Controls whether to use native number formatting APIs.

555

556

```javascript { .api }

557

useToLocaleString?: boolean;

558

// Default: true

559

```

560

561

### Grouping Separator

562

563

Thousands separator for fallback formatting.

564

565

```javascript { .api }

566

groupingSeparator?: string;

567

// Default: ","

568

```

569

570

### Decimal Separator

571

572

Decimal point character for fallback formatting.

573

574

```javascript { .api }

575

decimalSeparator?: string;

576

// Default: "."

577

```

578

579

### Grouping Pattern

580

581

Digit grouping pattern for fallback formatting.

582

583

```javascript { .api }

584

grouping?: number[];

585

// Default: [3] (standard thousands grouping)

586

```

587

588

**Usage Examples:**

589

590

```javascript

591

// Custom fallback number formatting

592

moment.duration(100000.1, "seconds").format({

593

template: "s",

594

userLocale: "de-DE",

595

precision: 2,

596

useToLocaleString: false, // Force fallback

597

decimalSeparator: ",",

598

groupingSeparator: ".",

599

grouping: [3]

600

});

601

// "100.000,10"

602

603

// Indian locale-style grouping

604

moment.duration(100000000000, "seconds").format({

605

template: "m",

606

useToLocaleString: false,

607

precision: 2,

608

decimalSeparator: ",",

609

groupingSeparator: " ",

610

grouping: [3, 2] // Thousand/lakh/crore grouping

611

});

612

// "1 66 66 66 666,67"

613

```