@descope/web-components-ui 1.0.112 → 1.0.114

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 (35) hide show
  1. package/dist/cjs/index.cjs.js +2614 -1324
  2. package/dist/cjs/index.cjs.js.map +1 -1
  3. package/dist/index.d.ts +21 -21
  4. package/dist/index.esm.js +562 -424
  5. package/dist/index.esm.js.map +1 -1
  6. package/package.json +2 -2
  7. package/src/dev/index.js +1 -1
  8. package/src/helpers/themeHelpers/index.js +6 -1
  9. package/src/index.cjs.js +4 -2
  10. package/src/index.d.ts +49 -0
  11. package/src/index.js +1 -1
  12. package/src/theme/components/button.js +30 -29
  13. package/src/theme/components/checkbox.js +1 -0
  14. package/src/theme/components/comboBox.js +1 -0
  15. package/src/theme/components/container.js +33 -32
  16. package/src/theme/components/divider.js +20 -19
  17. package/src/theme/components/emailField.js +1 -0
  18. package/src/theme/components/image.js +1 -0
  19. package/src/theme/components/index.js +27 -20
  20. package/src/theme/components/link.js +1 -0
  21. package/src/theme/components/loader/index.js +4 -2
  22. package/src/theme/components/loader/loaderLinear.js +1 -0
  23. package/src/theme/components/loader/loaderRadial.js +1 -0
  24. package/src/theme/components/logo.js +1 -0
  25. package/src/theme/components/newPassword.js +1 -0
  26. package/src/theme/components/numberField.js +1 -0
  27. package/src/theme/components/passcode.js +1 -0
  28. package/src/theme/components/passwordField.js +1 -0
  29. package/src/theme/components/phoneField.js +1 -1
  30. package/src/theme/components/switchToggle.js +1 -0
  31. package/src/theme/components/text.js +1 -0
  32. package/src/theme/components/textArea.js +1 -0
  33. package/src/theme/components/textField.js +1 -0
  34. package/src/theme/globals.js +6 -2
  35. package/src/theme/index.js +4 -3
@@ -208,6 +208,11 @@ const getThemeRefs = (theme, prefix) =>
208
208
  set({}, path, `var(${getVarName(prefix ? [prefix, ...path] : path)})`)
209
209
  );
210
210
 
211
+ const getThemeVars = (theme, prefix) =>
212
+ transformTheme(theme, [], (path) =>
213
+ set({}, path, getVarName(prefix ? [prefix, ...path] : path))
214
+ );
215
+
211
216
  const globalsThemeToStyle = (theme, themeName = '') => `
212
217
  *[data-theme="${themeName}"] {
213
218
  ${Object.entries(themeToCSSVarsObj(theme)).reduce(
@@ -223,7 +228,7 @@ const componentsThemeToStyleObj = (componentsTheme) =>
223
228
  const property = restPath.pop();
224
229
  const componentName = getComponentName(component);
225
230
 
226
- if(property === 'undefined'){
231
+ if (property === 'undefined') {
227
232
  console.warn(componentName, `theme value: "${val}" is mapped to an invalid property`);
228
233
  }
229
234
 
@@ -355,6 +360,154 @@ const genColors = (colors) => {
355
360
  }, {});
356
361
  };
357
362
 
363
+ const colors = genColors({
364
+ surface: {
365
+ main: 'lightgray',
366
+ light: '#fff',
367
+ dark: '#000',
368
+ },
369
+ primary: '#0082B5',
370
+ secondary: '#7D14EB',
371
+ success: 'green',
372
+ error: 'red'
373
+ });
374
+
375
+ const fonts = {
376
+ font1: {
377
+ family: [
378
+ "Roboto",
379
+ "ui-sans-serif",
380
+ "system-ui",
381
+ "-apple-system",
382
+ "BlinkMacSystemFont",
383
+ "Segoe UI",
384
+ "Helvetica Neue",
385
+ "Arial",
386
+ "Noto Sans",
387
+ "sans-serif",
388
+ "Apple Color Emoji",
389
+ "Segoe UI Emoji",
390
+ "Segoe UI Symbol",
391
+ "Noto Color Emoji"
392
+ ],
393
+ label: "Roboto",
394
+ url: "https://fonts.googleapis.com/css?family=Roboto:100,200,300,400,500,600,700,800,900"
395
+ },
396
+ font2: {
397
+ family: [
398
+ "ui-sans-serif",
399
+ "system-ui",
400
+ "-apple-system",
401
+ "BlinkMacSystemFont",
402
+ "Segoe UI",
403
+ "Roboto",
404
+ "Helvetica Neue",
405
+ "Arial",
406
+ "Noto Sans",
407
+ "sans-serif",
408
+ "Apple Color Emoji",
409
+ "Segoe UI Emoji",
410
+ "Segoe UI Symbol",
411
+ "Noto Color Emoji"
412
+ ],
413
+ label: "Sans Serif"
414
+ }
415
+ };
416
+
417
+ const fontsRef = getThemeRefs({ fonts }).fonts;
418
+
419
+ const typography = {
420
+ h1: {
421
+ font: fontsRef.font1.family,
422
+ weight: '900',
423
+ size: '48px'
424
+ },
425
+ h2: {
426
+ font: fontsRef.font1.family,
427
+ weight: '800',
428
+ size: '38px'
429
+ },
430
+ h3: {
431
+ font: fontsRef.font1.family,
432
+ weight: '600',
433
+ size: '28px'
434
+ },
435
+ subtitle1: {
436
+ font: fontsRef.font2.family,
437
+ weight: '500',
438
+ size: '22px'
439
+ },
440
+ subtitle2: {
441
+ font: fontsRef.font2.family,
442
+ weight: '400',
443
+ size: '20px'
444
+ },
445
+ body1: {
446
+ font: fontsRef.font1.family,
447
+ weight: '400',
448
+ size: '16px'
449
+ },
450
+ body2: {
451
+ font: fontsRef.font1.family,
452
+ weight: '400',
453
+ size: '14px'
454
+ }
455
+ };
456
+
457
+ const spacing = {
458
+ xs: '2px',
459
+ sm: '4px',
460
+ md: '8px',
461
+ lg: '16px',
462
+ xl: '32px'
463
+ };
464
+
465
+ const border = {
466
+ xs: '1px',
467
+ sm: '2px',
468
+ md: '3px',
469
+ lg: '4px',
470
+ xl: '5px'
471
+ };
472
+
473
+ const radius = {
474
+ xs: '5px',
475
+ sm: '10px',
476
+ md: '15px',
477
+ lg: '20px',
478
+ xl: '25px',
479
+ '2xl': '30px',
480
+ '3xl': '35px'
481
+ };
482
+
483
+ const shadow = {
484
+ wide: {
485
+ sm: '0 2px 3px -0.5px',
486
+ md: '0 4px 6px -1px',
487
+ lg: '0 10px 15px -3px',
488
+ xl: '0 20px 25px -5px',
489
+ '2xl': '0 25px 50px -12px'
490
+ },
491
+ narrow: {
492
+ sm: '0 1px 2px -1px',
493
+ md: '0 2px 4px -2px',
494
+ lg: '0 4px 6px -4px',
495
+ xl: '0 8px 10px -6px',
496
+ '2xl': '0 16px 16px -8px'
497
+ }
498
+ };
499
+
500
+ const globals = {
501
+ colors,
502
+ typography,
503
+ spacing,
504
+ border,
505
+ radius,
506
+ shadow,
507
+ fonts
508
+ };
509
+ const vars$l = getThemeVars(globals);
510
+
358
511
  const createCssVarFallback = (first, ...rest) =>
359
512
  `var(${first}${rest.length ? ` , ${createCssVarFallback(...rest)}` : ''})`;
360
513
 
@@ -1276,389 +1429,81 @@ const inputEventsDispatchingMixin = (superclass) => class InputEventsDispatching
1276
1429
  }
1277
1430
  };
1278
1431
 
1279
- const createBaseInputClass = (...args) => compose(
1280
- inputValidationMixin,
1281
- changeMixin,
1282
- normalizeBooleanAttributesMixin,
1283
- inputEventsDispatchingMixin
1284
- )(createBaseClass(...args));
1285
-
1286
- const componentName$n = getComponentName('boolean-field-internal');
1287
-
1288
- createBaseInputClass({ componentName: componentName$n, baseSelector: 'div' });
1289
-
1290
- const booleanFieldMixin = (superclass) =>
1291
- class BooleanFieldMixinClass extends superclass {
1292
- constructor() {
1293
- super();
1294
- }
1295
-
1296
- init() {
1297
- super.init?.();
1298
-
1299
- const template = document.createElement('template');
1300
- template.innerHTML = `
1301
- <${componentName$n}
1302
- tabindex="-1"
1303
- slot="input"
1304
- ></${componentName$n}>
1305
- `;
1306
-
1307
- this.baseElement.appendChild(template.content.cloneNode(true));
1308
- this.inputElement = this.shadowRoot.querySelector(componentName$n);
1309
- this.checkbox = this.inputElement.querySelector('vaadin-checkbox');
1310
-
1311
- forwardAttrs(this, this.inputElement, {
1312
- includeAttrs: [
1313
- 'required',
1314
- 'full-width',
1315
- 'size',
1316
- 'label',
1317
- 'invalid',
1318
- ]
1319
- });
1320
-
1321
- forwardProps(this.inputElement, this, ['checked']);
1322
- syncAttrs(this, this.inputElement, { includeAttrs: ['checked'] });
1323
- }
1324
- };
1325
-
1326
- var commonStyles = `
1327
- :host {
1328
- --vaadin-field-default-width: auto;
1329
- display: inline-flex;
1330
- }
1331
- .wrapper {
1332
- display: flex;
1333
- }
1334
-
1335
- vaadin-text-field {
1336
- position: relative;
1337
- padding: 0;
1338
- display: inline-flex;
1339
- align-items: flex-start;
1340
- }
1341
- vaadin-text-field::before {
1342
- height: 0;
1343
- margin: 0;
1344
- }
1345
- vaadin-text-field::part(label) {
1346
- position: absolute;
1347
- top: 0;
1348
- }
1349
- vaadin-text-field::part(input-field) {
1350
- padding: 0;
1351
- background: none;
1352
- min-height: 0;
1353
- }
1354
- vaadin-text-field::part(input-field)::after {
1355
- background: none;
1356
- }
1357
- vaadin-text-field[focus-ring]::part(input-field) {
1358
- box-shadow: none;
1359
- }
1360
- vaadin-text-field[required]::part(required-indicator)::after {
1361
- content: "*";
1362
- }
1432
+ const componentName$n = getComponentName('button');
1363
1433
 
1364
- vaadin-checkbox [slot="label"] {
1365
- align-self: flex-start;
1366
- opacity: 0;
1367
- padding: 0;
1368
- }
1369
- [required] vaadin-checkbox [slot="label"] {
1370
- padding-right: 1em;
1371
- }
1372
- vaadin-checkbox::part(checkbox) {
1373
- margin: 0;
1374
- }
1375
- vaadin-checkbox[focus-ring]::part(checkbox) {
1376
- box-shadow: none;
1377
- }
1434
+ const resetStyles = `
1435
+ :host {
1436
+ display: inline-block;
1437
+ }
1438
+ vaadin-button {
1439
+ margin: 0;
1440
+ min-width: 0;
1441
+ width: 100%;
1442
+ height: auto;
1443
+ }
1444
+ vaadin-button::part(label) {
1445
+ padding: 0;
1446
+ }
1447
+ vaadin-button::part(prefix) {
1448
+ margin-left: 0;
1449
+ margin-right: 0;
1450
+ }
1451
+ `;
1378
1452
 
1379
- descope-boolean-field-internal {
1380
- -webkit-mask-image: none;
1381
- min-height: 0;
1382
- padding: 0;
1383
- }
1453
+ const iconStyles = `
1454
+ vaadin-button::part(prefix),
1455
+ vaadin-button::part(label) {
1456
+ display: flex;
1457
+ justify-content: center;
1458
+ align-items: center;
1459
+ }
1384
1460
  `;
1385
1461
 
1386
- const componentName$m = getComponentName('checkbox');
1462
+ const editorOverrides = `vaadin-button::part(label) { pointer-events: none; }`;
1387
1463
 
1388
- const {
1389
- host: host$a,
1390
- component: component$1,
1391
- checkboxElement,
1392
- checkboxSurface,
1393
- checkboxHiddenLabel: checkboxHiddenLabel$1,
1394
- label: label$7,
1395
- requiredIndicator: requiredIndicator$5
1396
- } = {
1464
+ const { host: host$a, label: label$7 } = {
1397
1465
  host: { selector: () => ':host' },
1398
1466
  label: { selector: '::part(label)' },
1399
- requiredIndicator: { selector: '::part(required-indicator)::after' },
1400
- component: { selector: 'vaadin-checkbox' },
1401
- checkboxElement: { selector: 'vaadin-checkbox::part(checkbox)' },
1402
- checkboxSurface: { selector: 'vaadin-checkbox::part(checkbox)::after' },
1403
- checkboxHiddenLabel: { selector: 'vaadin-checkbox [slot="label"]' },
1404
1467
  };
1405
1468
 
1406
- const CheckboxClass = compose(
1469
+ const ButtonClass = compose(
1407
1470
  createStyleMixin({
1408
1471
  mappings: {
1472
+ color: {},
1473
+ textDecoration: label$7,
1474
+ fontSize: {},
1475
+ cursor: {},
1476
+ backgroundColor: {},
1477
+ borderRadius: {},
1478
+ borderColor: {},
1479
+ borderStyle: {},
1480
+ borderWidth: {},
1409
1481
  width: host$a,
1410
- cursor: component$1,
1411
-
1412
- // Checkbox
1413
- checkboxBackgroundColor: { ...checkboxElement, property: 'background-color' },
1414
- checkboxRadius: { ...checkboxElement, property: 'border-radius' },
1415
-
1416
- checkboxSize: [
1417
- { ...checkboxElement, property: 'width' },
1418
- { ...label$7, property: 'margin-left' },
1419
- { ...checkboxElement, property: 'height' },
1420
- { ...checkboxSurface, property: 'font-size' },
1421
- { ...component$1, property: 'font-size' },
1422
- { ...label$7, property: 'line-height' },
1423
- { ...checkboxHiddenLabel$1, property: 'line-height' }
1424
- ],
1425
-
1426
- checkboxOutlineWidth: { ...checkboxElement, property: 'outline-width' },
1427
- checkboxOutlineOffset: { ...checkboxElement, property: 'outline-offset' },
1428
- checkboxOutlineColor: { ...checkboxElement, property: 'outline-color' },
1429
- checkboxOutlineStyle: { ...checkboxElement, property: 'outline-style' },
1430
-
1431
- // Checkmark
1432
- checkmarkTextColor: { ...checkboxSurface, property: 'color' },
1433
-
1434
- // Label
1435
- labelFontSize: [
1436
- { ...host$a, property: 'font-size' },
1437
- { ...checkboxElement, property: 'font-size' },
1438
- { ...label$7, property: 'font-size' },
1439
- { ...checkboxHiddenLabel$1, property: 'font-size' }
1440
- ],
1441
- labelFontWeight: [
1442
- { ...label$7, property: 'font-weight' },
1443
- { ...checkboxHiddenLabel$1, property: 'font-weight' }
1444
- ],
1445
- labelMargin: [
1446
- { ...label$7, property: 'left' },
1447
- { ...checkboxHiddenLabel$1, property: 'padding-left' }
1448
- ],
1449
- labelTextColor: [
1450
- { ...label$7, property: 'color' },
1451
- { ...requiredIndicator$5, property: 'color' },
1482
+ gap: label$7,
1483
+ verticalPadding: [
1484
+ { property: 'padding-top' },
1485
+ { property: 'padding-bottom' },
1452
1486
  ],
1453
- },
1487
+ horizontalPadding: [
1488
+ { property: 'padding-left' },
1489
+ { property: 'padding-right' },
1490
+ ]
1491
+ }
1454
1492
  }),
1455
1493
  draggableMixin,
1456
- proxyInputMixin,
1457
- componentNameValidationMixin,
1458
- booleanFieldMixin
1494
+ componentNameValidationMixin
1459
1495
  )(
1460
1496
  createProxy({
1461
- slots: [],
1462
- wrappedEleName: 'vaadin-text-field',
1463
- style: `
1464
- ${commonStyles}
1465
-
1466
- vaadin-checkbox [slot="label"] {
1467
- height: 100%;
1468
- cursor: pointer;
1469
- }
1497
+ slots: ['prefix', 'label', 'suffix'],
1498
+ wrappedEleName: 'vaadin-button',
1499
+ style: () => `
1500
+ ${resetStyles}
1501
+ ${iconStyles}
1502
+ ${loadingIndicatorStyles}
1503
+ ${editorOverrides}
1470
1504
  `,
1471
1505
  excludeAttrsSync: ['tabindex'],
1472
- componentName: componentName$m
1473
- })
1474
- );
1475
-
1476
- const componentName$l = getComponentName('switch-toggle');
1477
-
1478
- const {
1479
- host: host$9,
1480
- component,
1481
- checkboxElement: track,
1482
- checkboxSurface: knob,
1483
- checkboxHiddenLabel,
1484
- label: label$6,
1485
- requiredIndicator: requiredIndicator$4,
1486
- } = {
1487
- host: { selector: () => ':host' },
1488
- label: { selector: '::part(label)' },
1489
- requiredIndicator: { selector: '::part(required-indicator)::after' },
1490
- component: { selector: 'vaadin-checkbox' },
1491
- checkboxElement: { selector: 'vaadin-checkbox::part(checkbox)' },
1492
- checkboxSurface: { selector: 'vaadin-checkbox::part(checkbox)::after' },
1493
- checkboxHiddenLabel: { selector: 'vaadin-checkbox [slot="label"]' },
1494
- };
1495
-
1496
- const SwitchToggleClass = compose(
1497
- createStyleMixin({
1498
- mappings: {
1499
- width: host$9,
1500
- cursor: [component, checkboxHiddenLabel, track],
1501
- fontSize: [component, label$6, checkboxHiddenLabel],
1502
-
1503
- // Track
1504
- trackBorderWidth: { ...track, property: 'border-width' },
1505
- trackBorderStyle: { ...track, property: 'border-style' },
1506
- trackBorderColor: { ...track, property: 'border-color' },
1507
-
1508
- // Checkbox
1509
- trackBackgroundColor: { ...track, property: 'background-color' },
1510
- trackRadius: { ...track, property: 'border-radius' },
1511
-
1512
- trackWidth: [
1513
- { ...track, property: 'width' },
1514
- ],
1515
- trackHeight: [
1516
- { ...knob, property: 'font-size' },
1517
- { ...track, property: 'height' }
1518
- ],
1519
- switchOutlineWidth: { ...track, property: 'outline-width' },
1520
- switchOutlineOffset: { ...track, property: 'outline-offset' },
1521
- switchOutlineColor: { ...track, property: 'outline-color' },
1522
- switchOutlineStyle: { ...track, property: 'outline-style' },
1523
-
1524
- // Knob
1525
- knobSize: [
1526
- { ...knob, property: 'width' },
1527
- { ...knob, property: 'height' },
1528
- ],
1529
- knobTextColor: { ...knob, property: 'color' },
1530
- knobRadius: { ...knob, property: 'border-radius' },
1531
- knobTransition: { ...knob, property: 'transition' },
1532
- knobColor: { ...knob, property: 'background-color' },
1533
- knobTopOffset: { ...knob, property: 'top' },
1534
- knobPosition: { ...knob, property: 'left' },
1535
-
1536
- // Label
1537
- labelMargin: [
1538
- { ...label$6, property: 'padding-left' },
1539
- { ...checkboxHiddenLabel, property: 'padding-left' }
1540
- ],
1541
- labelLineHeight: [
1542
- { ...label$6, property: 'line-height' },
1543
- { ...checkboxHiddenLabel, property: 'line-height' }
1544
- ],
1545
- labelFontWeight: [
1546
- { ...label$6, property: 'font-weight' },
1547
- { ...checkboxHiddenLabel, property: 'font-weight' }
1548
- ],
1549
- labelTextColor: [
1550
- { ...label$6, property: 'color' },
1551
- { ...requiredIndicator$4, property: 'color' },
1552
- ],
1553
- },
1554
- }),
1555
- draggableMixin,
1556
- proxyInputMixin,
1557
- componentNameValidationMixin,
1558
- booleanFieldMixin
1559
- )(
1560
- createProxy({
1561
- slots: [],
1562
- wrappedEleName: 'vaadin-text-field',
1563
- style: () => `
1564
- ${commonStyles}
1565
-
1566
- vaadin-text-field::part(label) {
1567
- left: calc(var(${SwitchToggleClass.cssVarList.trackWidth}) + var(${SwitchToggleClass.cssVarList.trackBorderWidth}) * 2);
1568
- }
1569
-
1570
- vaadin-checkbox[active]::part(checkbox) {
1571
- transform: none;
1572
- }
1573
- vaadin-checkbox[checked]::part(checkbox) {
1574
- background: none;
1575
- }
1576
- vaadin-checkbox::part(checkbox)::after {
1577
- position: absolute;
1578
- opacity: 1;
1579
- content: '';
1580
- }
1581
- `,
1582
- excludeAttrsSync: ['tabindex'],
1583
- componentName: componentName$l
1584
- })
1585
- );
1586
-
1587
- const componentName$k = getComponentName('button');
1588
-
1589
- const resetStyles = `
1590
- :host {
1591
- display: inline-block;
1592
- }
1593
- vaadin-button {
1594
- margin: 0;
1595
- min-width: 0;
1596
- width: 100%;
1597
- height: auto;
1598
- }
1599
- vaadin-button::part(label) {
1600
- padding: 0;
1601
- }
1602
- vaadin-button::part(prefix) {
1603
- margin-left: 0;
1604
- margin-right: 0;
1605
- }
1606
- `;
1607
-
1608
- const iconStyles = `
1609
- vaadin-button::part(prefix),
1610
- vaadin-button::part(label) {
1611
- display: flex;
1612
- justify-content: center;
1613
- align-items: center;
1614
- }
1615
- `;
1616
-
1617
- const editorOverrides = `vaadin-button::part(label) { pointer-events: none; }`;
1618
-
1619
- const { host: host$8, label: label$5 } = {
1620
- host: { selector: () => ':host' },
1621
- label: { selector: '::part(label)' },
1622
- };
1623
-
1624
- const ButtonClass = compose(
1625
- createStyleMixin({
1626
- mappings: {
1627
- color: {},
1628
- textDecoration: label$5,
1629
- fontSize: {},
1630
- cursor: {},
1631
- backgroundColor: {},
1632
- borderRadius: {},
1633
- borderColor: {},
1634
- borderStyle: {},
1635
- borderWidth: {},
1636
- width: host$8,
1637
- gap: label$5,
1638
- verticalPadding: [
1639
- { property: 'padding-top' },
1640
- { property: 'padding-bottom' },
1641
- ],
1642
- horizontalPadding: [
1643
- { property: 'padding-left' },
1644
- { property: 'padding-right' },
1645
- ]
1646
- }
1647
- }),
1648
- draggableMixin,
1649
- componentNameValidationMixin
1650
- )(
1651
- createProxy({
1652
- slots: ['prefix', 'label', 'suffix'],
1653
- wrappedEleName: 'vaadin-button',
1654
- style: () => `
1655
- ${resetStyles}
1656
- ${iconStyles}
1657
- ${loadingIndicatorStyles}
1658
- ${editorOverrides}
1659
- `,
1660
- excludeAttrsSync: ['tabindex'],
1661
- componentName: componentName$k
1506
+ componentName: componentName$n
1662
1507
  })
1663
1508
  );
1664
1509
 
@@ -1691,261 +1536,97 @@ const loadingIndicatorStyles = `
1691
1536
  }
1692
1537
  `;
1693
1538
 
1694
- const componentName$j = getComponentName('loader-linear');
1539
+ const globalRefs$e = getThemeRefs(globals);
1540
+ const compVars$2 = ButtonClass.cssVarList;
1695
1541
 
1696
- class RawLoaderLinear extends createBaseClass({ componentName: componentName$j, baseSelector: ':host > div' }) {
1697
- static get componentName() {
1698
- return componentName$j;
1699
- }
1700
- constructor() {
1701
- super();
1542
+ const mode = {
1543
+ primary: globalRefs$e.colors.primary,
1544
+ secondary: globalRefs$e.colors.secondary,
1545
+ success: globalRefs$e.colors.success,
1546
+ error: globalRefs$e.colors.error,
1547
+ surface: globalRefs$e.colors.surface
1548
+ };
1702
1549
 
1703
- this.attachShadow({ mode: 'open' }).innerHTML = `
1704
- <style>
1705
- @keyframes tilt {
1706
- 0% { transform: translateX(0); }
1707
- 50% { transform: translateX(400%); }
1708
- }
1709
- :host {
1710
- position: relative;
1711
- display: flex;
1712
- }
1713
- div::after {
1714
- content: '';
1715
- animation-name: tilt;
1716
- position: absolute;
1717
- left: 0;
1718
- }
1550
+ const [helperTheme$2, helperRefs$2, helperVars$2] = createHelperVars({ mode }, componentName$n);
1719
1551
 
1720
- :host > div {
1721
- width: 100%;
1722
- }
1723
- </style>
1724
- <div></div>
1725
- `;
1726
- }
1727
- }
1552
+ const verticalPaddingRatio = 3;
1553
+ const horizontalPaddingRatio = 2;
1728
1554
 
1729
- const selectors$3 = {
1730
- root: {},
1731
- after: { selector: '::after' },
1732
- host: { selector: () => ':host' }
1733
- };
1555
+ const button = {
1556
+ ...helperTheme$2,
1734
1557
 
1735
- const { root: root$1, after: after$1, host: host$7 } = selectors$3;
1558
+ [compVars$2.cursor]: 'pointer',
1736
1559
 
1737
- const LoaderLinearClass = compose(
1738
- createStyleMixin({
1739
- mappings: {
1740
- display: root$1,
1741
- width: host$7,
1742
- height: [root$1, after$1],
1743
- borderRadius: [root$1, after$1],
1744
- surfaceColor: [{ property: 'background-color' }],
1745
- barColor: [{ ...after$1, property: 'background-color' }],
1746
- barWidth: { ...after$1, property: 'width' },
1747
- animationDuration: [root$1, after$1],
1748
- animationTimingFunction: [root$1, after$1],
1749
- animationIterationCount: [root$1, after$1]
1750
- }
1751
- }),
1752
- draggableMixin,
1753
- componentNameValidationMixin
1754
- )(RawLoaderLinear);
1560
+ [compVars$2.borderRadius]: globalRefs$e.radius.sm,
1561
+ [compVars$2.borderWidth]: '2px',
1562
+ [compVars$2.borderStyle]: 'solid',
1563
+ [compVars$2.borderColor]: 'transparent',
1755
1564
 
1756
- const componentName$i = getComponentName('loader-radial');
1565
+ [compVars$2.gap]: '0.25em',
1757
1566
 
1758
- class RawLoaderRadial extends createBaseClass({ componentName: componentName$i, baseSelector: ':host > div' }) {
1759
- constructor() {
1760
- super();
1567
+ [compVars$2.verticalPadding]: `calc(var(${compVars$2.fontSize}) / ${verticalPaddingRatio})`,
1568
+ [compVars$2.horizontalPadding]: `calc(var(${compVars$2.fontSize}) / ${horizontalPaddingRatio})`,
1761
1569
 
1762
- this.attachShadow({ mode: 'open' }).innerHTML = `
1763
- <style>
1764
- @keyframes spin {
1765
- 0% { transform: rotate(0deg); }
1766
- 100% { transform: rotate(360deg); }
1767
- }
1768
- :host {
1769
- position: relative;
1770
- display: inline-flex;
1570
+ size: {
1571
+ xs: { [compVars$2.fontSize]: '12px' },
1572
+ sm: { [compVars$2.fontSize]: '14px' },
1573
+ md: { [compVars$2.fontSize]: '18px' },
1574
+ lg: { [compVars$2.fontSize]: '22px' },
1575
+ xl: { [compVars$2.fontSize]: '26px' }
1576
+ },
1577
+
1578
+ _fullWidth: {
1579
+ [compVars$2.width]: '100%'
1580
+ },
1581
+
1582
+ _loading: {
1583
+ [compVars$2.cursor]: 'wait'
1584
+ },
1585
+
1586
+ variant: {
1587
+ contained: {
1588
+ [compVars$2.color]: helperRefs$2.contrast,
1589
+ [compVars$2.backgroundColor]: helperRefs$2.main,
1590
+ _hover: {
1591
+ [compVars$2.backgroundColor]: helperRefs$2.dark
1592
+ },
1593
+ _active: {
1594
+ [compVars$2.backgroundColor]: helperRefs$2.dark
1771
1595
  }
1772
- :host > div {
1773
- animation-name: spin;
1596
+ },
1597
+
1598
+ outline: {
1599
+ [compVars$2.color]: helperRefs$2.main,
1600
+ [compVars$2.borderColor]: 'currentColor',
1601
+ _hover: {
1602
+ [compVars$2.color]: helperRefs$2.dark,
1603
+ },
1604
+ _active: {
1605
+ [compVars$2.color]: helperRefs$2.light,
1774
1606
  }
1775
- </style>
1776
- <div></div>
1777
- `;
1778
- }
1779
- }
1607
+ },
1780
1608
 
1781
- const LoaderRadialClass = compose(
1782
- createStyleMixin({
1783
- mappings: {
1784
- display: {},
1785
- width: {},
1786
- height: {},
1787
- spinnerWidth: { property: 'border-width' },
1788
- spinnerStyle: { property: 'border-style' },
1789
- spinnerRadius: { property: 'border-radius' },
1790
- spinnerTopColor: { property: 'border-top-color' },
1791
- spinnerBottomColor: { property: 'border-bottom-color' },
1792
- spinnerRightColor: { property: 'border-right-color' },
1793
- spinnerLeftColor: { property: 'border-left-color' },
1794
- color: {},
1795
- animationDuration: {},
1796
- animationTimingFunction: {},
1797
- animationIterationCount: {}
1609
+ link: {
1610
+ [compVars$2.color]: helperRefs$2.main,
1611
+ _hover: {
1612
+ [compVars$2.color]: helperRefs$2.main,
1613
+ [compVars$2.textDecoration]: 'underline'
1614
+ },
1615
+ _active: {
1616
+ [compVars$2.color]: helperRefs$2.dark
1617
+ }
1798
1618
  }
1799
- }),
1800
- draggableMixin,
1801
- componentNameValidationMixin
1802
- )(RawLoaderRadial);
1619
+ }
1620
+ };
1621
+ const vars$k = { ...compVars$2, ...helperVars$2 };
1803
1622
 
1804
- const componentName$h = getComponentName('container');
1623
+ var button$1 = /*#__PURE__*/Object.freeze({
1624
+ __proto__: null,
1625
+ default: button,
1626
+ vars: vars$k
1627
+ });
1805
1628
 
1806
- class RawContainer extends createBaseClass({ componentName: componentName$h, baseSelector: ':host > slot' }) {
1807
- constructor() {
1808
- super();
1809
-
1810
- this.attachShadow({ mode: 'open' }).innerHTML = `
1811
- <style>
1812
- :host > slot {
1813
- box-sizing: border-box;
1814
- width: 100%;
1815
- height: 100%;
1816
- display: flex;
1817
- overflow: hidden;
1818
- }
1819
- :host {
1820
- display: inline-block;
1821
- overflow: auto;
1822
- }
1823
- </style>
1824
- <slot></slot>
1825
- `;
1826
- }
1827
- }
1828
-
1829
- const ContainerClass = compose(
1830
- createStyleMixin({
1831
- mappings: {
1832
- height: { selector: () => ':host' },
1833
- width: { selector: () => ':host' },
1834
-
1835
- verticalPadding: [
1836
- { property: 'padding-top' },
1837
- { property: 'padding-bottom' }
1838
- ],
1839
- horizontalPadding: [
1840
- { property: 'padding-left' },
1841
- { property: 'padding-right' }
1842
- ],
1843
-
1844
- flexDirection: {},
1845
- justifyContent: {},
1846
- alignItems: {},
1847
- gap: {},
1848
- flexWrap: {},
1849
-
1850
- backgroundColor: {},
1851
- color: {},
1852
- borderRadius: {},
1853
-
1854
- borderColor: {},
1855
- borderStyle: {},
1856
- borderWidth: {},
1857
-
1858
- boxShadow: {}
1859
- }
1860
- }),
1861
- draggableMixin,
1862
- componentNameValidationMixin
1863
- )(RawContainer);
1864
-
1865
- const componentName$g = getComponentName('divider');
1866
- class RawDivider extends createBaseClass({ componentName: componentName$g, baseSelector: ':host > div' }) {
1867
- constructor() {
1868
- super();
1869
-
1870
- this.attachShadow({ mode: 'open' }).innerHTML = `
1871
- <style>
1872
- :host {
1873
- display: inline-block;
1874
- }
1875
- :host > div {
1876
- display: flex;
1877
- height: 100%;
1878
- width: 100%;
1879
- }
1880
- :host > div::before,
1881
- :host > div::after {
1882
- content: '';
1883
- flex-grow: 1;
1884
- }
1885
-
1886
- descope-text {
1887
- flex-grow: 0;
1888
- flex-shrink: 0;
1889
- min-width: fit-content;
1890
- }
1891
-
1892
- :host(:empty) descope-text {
1893
- display: none;
1894
- }
1895
-
1896
- :host([vertical="true"]) div {
1897
- width: fit-content;
1898
- }
1899
-
1900
- </style>
1901
- <div>
1902
- <descope-text>
1903
- <slot></slot>
1904
- </descope-text>
1905
- </div>
1906
- `;
1907
-
1908
- this.textComponent = this.shadowRoot.querySelector('descope-text');
1909
-
1910
- forwardAttrs(this, this.textComponent, {
1911
- includeAttrs: ['mode', 'variant', 'italic']
1912
- });
1913
- }
1914
- }
1915
-
1916
- const selectors$2 = {
1917
- root: { selector: '' },
1918
- before: { selector: '::before' },
1919
- after: { selector: '::after' },
1920
- text: { selector: 'descope-text' },
1921
- host: { selector: () => ':host' },
1922
- };
1923
-
1924
- const { root, before, after, text: text$1, host: host$6 } = selectors$2;
1925
-
1926
- const DividerClass = compose(
1927
- createStyleMixin({
1928
- mappings: {
1929
- maxTextWidth: { ...text$1, property: 'max-width' },
1930
- minHeight: root,
1931
- alignItems: root,
1932
- alignSelf: root,
1933
- flexDirection: root,
1934
- textPadding: { ...text$1, property: 'padding' },
1935
- width: host$6,
1936
- padding: host$6,
1937
- backgroundColor: [before, after],
1938
- opacity: [before, after],
1939
- textWidth: { ...text$1, property: 'width' },
1940
- dividerHeight: [{ ...before, property: 'height' }, { ...after, property: 'height' }],
1941
- dividerWidth: [{ ...before, property: 'width' }, { ...after, property: 'width' }]
1942
- },
1943
- }),
1944
- draggableMixin,
1945
- componentNameValidationMixin
1946
- )(RawDivider);
1947
-
1948
- const selectors$1 = {
1629
+ const selectors$3 = {
1949
1630
  label: '::part(label)',
1950
1631
  inputWrapper: '::part(input-field)',
1951
1632
  readOnlyInput: '[readonly]::part(input-field)::after',
@@ -1955,262 +1636,435 @@ const selectors$1 = {
1955
1636
  };
1956
1637
 
1957
1638
  var textFieldMappings = {
1958
- backgroundColor: { selector: selectors$1.inputWrapper },
1959
- labelTextColor: { selector: selectors$1.label, property: 'color' },
1960
- color: { selector: selectors$1.inputWrapper },
1961
- width: { selector: selectors$1.host },
1639
+ backgroundColor: { selector: selectors$3.inputWrapper },
1640
+ labelTextColor: { selector: selectors$3.label, property: 'color' },
1641
+ color: { selector: selectors$3.inputWrapper },
1642
+ width: { selector: selectors$3.host },
1962
1643
  borderColor: [
1963
- { selector: selectors$1.inputWrapper },
1964
- { selector: selectors$1.readOnlyInput }
1644
+ { selector: selectors$3.inputWrapper },
1645
+ { selector: selectors$3.readOnlyInput }
1965
1646
  ],
1966
1647
  borderWidth: [
1967
- { selector: selectors$1.inputWrapper },
1968
- { selector: selectors$1.readOnlyInput }
1648
+ { selector: selectors$3.inputWrapper },
1649
+ { selector: selectors$3.readOnlyInput }
1969
1650
  ],
1970
1651
  borderStyle: [
1971
- { selector: selectors$1.inputWrapper },
1972
- { selector: selectors$1.readOnlyInput }
1652
+ { selector: selectors$3.inputWrapper },
1653
+ { selector: selectors$3.readOnlyInput }
1973
1654
  ],
1974
- borderRadius: { selector: selectors$1.inputWrapper },
1975
- boxShadow: { selector: selectors$1.inputWrapper },
1655
+ borderRadius: { selector: selectors$3.inputWrapper },
1656
+ boxShadow: { selector: selectors$3.inputWrapper },
1976
1657
 
1977
1658
  // we apply font-size also on the host so we can set its width with em
1978
- fontSize: [{}, { selector: selectors$1.host }],
1979
-
1980
- height: { selector: selectors$1.inputWrapper },
1981
- padding: { selector: selectors$1.inputWrapper },
1982
- margin: { selector: selectors$1.inputWrapper },
1983
- caretColor: { selector: selectors$1.input },
1984
- outlineColor: { selector: selectors$1.inputWrapper },
1985
- outlineStyle: { selector: selectors$1.inputWrapper },
1659
+ fontSize: [{}, { selector: selectors$3.host }],
1660
+
1661
+ height: { selector: selectors$3.inputWrapper },
1662
+ padding: { selector: selectors$3.inputWrapper },
1663
+ margin: { selector: selectors$3.inputWrapper },
1664
+ caretColor: { selector: selectors$3.input },
1665
+ outlineColor: { selector: selectors$3.inputWrapper },
1666
+ outlineStyle: { selector: selectors$3.inputWrapper },
1986
1667
  outlineWidth: [
1987
- { selector: selectors$1.inputWrapper },
1668
+ { selector: selectors$3.inputWrapper },
1988
1669
  // we need to make sure there is enough space for the outline
1989
1670
  { property: 'padding' }
1990
1671
  ],
1991
- outlineOffset: { selector: selectors$1.inputWrapper },
1992
- textAlign: { selector: selectors$1.input },
1993
- placeholderColor: { selector: selectors$1.placeholder, property: 'color' }
1672
+ outlineOffset: { selector: selectors$3.inputWrapper },
1673
+ textAlign: { selector: selectors$3.input },
1674
+ placeholderColor: { selector: selectors$3.placeholder, property: 'color' }
1994
1675
  };
1995
1676
 
1996
- const componentName$f = getComponentName('email-field');
1677
+ const componentName$m = getComponentName('text-field');
1997
1678
 
1998
1679
  let overrides$4 = ``;
1999
1680
 
2000
- const EmailFieldClass = compose(
2001
- createStyleMixin({
2002
- mappings: {
2003
- ...textFieldMappings
1681
+ const observedAttrs = ['type'];
1682
+
1683
+ const customMixin$3 = (superclass) =>
1684
+ class TextFieldClass extends superclass {
1685
+ static get observedAttributes() {
1686
+ return observedAttrs.concat(superclass.observedAttributes || []);
1687
+ }
1688
+
1689
+ attributeChangedCallback(attrName, oldVal, newVal) {
1690
+ super.attributeChangeCallback?.(attrName, oldVal, newVal);
1691
+
1692
+ // Vaadin doesn't allow to change the input type attribute.
1693
+ // We need the ability to do that, so we're overriding their
1694
+ // behavior with their private API.
1695
+ // When receiving a `type` attribute, we use their private API
1696
+ // to set it on the input.
1697
+ if (attrName === 'type') {
1698
+ this.baseElement._setType(newVal);
1699
+ }
2004
1700
  }
1701
+ };
1702
+
1703
+ const TextFieldClass = compose(
1704
+ createStyleMixin({
1705
+ mappings: textFieldMappings
2005
1706
  }),
2006
1707
  draggableMixin,
2007
1708
  proxyInputMixin,
2008
- componentNameValidationMixin
1709
+ componentNameValidationMixin,
1710
+ customMixin$3
2009
1711
  )(
2010
1712
  createProxy({
2011
- slots: ['suffix'],
2012
- wrappedEleName: 'vaadin-email-field',
1713
+ slots: ['prefix', 'suffix'],
1714
+ wrappedEleName: 'vaadin-text-field',
2013
1715
  style: () => overrides$4,
2014
1716
  excludeAttrsSync: ['tabindex'],
2015
- componentName: componentName$f
1717
+ componentName: componentName$m
2016
1718
  })
2017
1719
  );
2018
1720
 
2019
1721
  overrides$4 = `
2020
1722
  :host {
2021
1723
  display: inline-block;
2022
- min-width: 10em;
1724
+ --vaadin-field-default-width: auto;
2023
1725
  max-width: 100%;
1726
+ min-width: 10em;
1727
+
2024
1728
  }
2025
- vaadin-email-field {
1729
+ vaadin-text-field {
2026
1730
  margin: 0;
2027
1731
  width: 100%;
1732
+ height: 100%;
2028
1733
  box-sizing: border-box;
2029
1734
  }
2030
- vaadin-email-field::before {
2031
- height: 0;
2032
- }
2033
- vaadin-email-field > input {
2034
- -webkit-mask-image: none;
2035
- }
2036
- vaadin-email-field::part(input-field) {
1735
+
1736
+ vaadin-text-field::part(input-field) {
2037
1737
  overflow: hidden;
2038
1738
  padding: 0;
2039
1739
  }
2040
- vaadin-email-field[readonly] > input:placeholder-shown {
1740
+ vaadin-text-field[disabled] > input:placeholder-shown,
1741
+ vaadin-text-field[readonly] > input:placeholder-shown {
2041
1742
  opacity: 1;
2042
1743
  }
2043
- vaadin-email-field input:-webkit-autofill,
2044
- vaadin-email-field input:-webkit-autofill::first-line,
2045
- vaadin-email-field input:-webkit-autofill:hover,
2046
- vaadin-email-field input:-webkit-autofill:active,
2047
- vaadin-email-field input:-webkit-autofill:focus {
2048
- -webkit-text-fill-color: var(${EmailFieldClass.cssVarList.color});
2049
- box-shadow: 0 0 0 var(${EmailFieldClass.cssVarList.height}) var(${EmailFieldClass.cssVarList.backgroundColor}) inset;
1744
+ vaadin-text-field input:-webkit-autofill,
1745
+ vaadin-text-field input:-webkit-autofill::first-line,
1746
+ vaadin-text-field input:-webkit-autofill:hover,
1747
+ vaadin-text-field input:-webkit-autofill:active,
1748
+ vaadin-text-field input:-webkit-autofill:focus {
1749
+ -webkit-text-fill-color: var(${TextFieldClass.cssVarList.color});
1750
+ box-shadow: 0 0 0 var(${TextFieldClass.cssVarList.height}) var(${TextFieldClass.cssVarList.backgroundColor}) inset;
2050
1751
  }
2051
- vaadin-email-field[required]::part(required-indicator)::after {
1752
+
1753
+ vaadin-text-field > input {
1754
+ -webkit-mask-image: none;
1755
+ min-height: 0;
1756
+ }
1757
+
1758
+ vaadin-text-field[required]::part(required-indicator)::after {
2052
1759
  content: "*";
2053
- color: var(${EmailFieldClass.cssVarList.color});
1760
+ color: var(${TextFieldClass.cssVarList.color});
2054
1761
  }
2055
- vaadin-email-field[readonly]::part(input-field)::after {
2056
- border: 0 solid;
1762
+ vaadin-text-field::part(input-field)::after {
1763
+ opacity: 0 !important;
2057
1764
  }
2058
- `;
2059
1765
 
2060
- const componentName$e = getComponentName('text');
1766
+ vaadin-text-field::before {
1767
+ height: unset;
1768
+ }
1769
+ `;
2061
1770
 
2062
- class RawText extends createBaseClass({ componentName: componentName$e, baseSelector: ':host > slot' }) {
2063
- constructor() {
2064
- super();
1771
+ const globalRefs$d = getThemeRefs(globals);
2065
1772
 
2066
- this.attachShadow({ mode: 'open' }).innerHTML = `
2067
- <style>
2068
- :host {
2069
- display: inline-block;
2070
- }
2071
- :host > slot {
2072
- width: 100%;
2073
- display: inline-block;
2074
- }
2075
- </style>
2076
- <slot></slot>
2077
- `;
2078
- }
2079
- }
1773
+ const vars$j = TextFieldClass.cssVarList;
2080
1774
 
2081
- const TextClass = compose(
2082
- createStyleMixin({
2083
- mappings: {
2084
- fontFamily: {},
2085
- lineHeight: {},
2086
- fontStyle: {},
2087
- fontSize: {},
2088
- fontWeight: {},
2089
- width: { selector: () => ':host' },
2090
- color: {},
2091
- letterSpacing: {},
2092
- textShadow: {},
2093
- borderWidth: {},
2094
- borderStyle: {},
2095
- borderColor: {},
2096
- textTransform: {},
2097
- textAlign: {},
2098
- },
2099
- }),
2100
- draggableMixin,
2101
- componentNameValidationMixin
2102
- )(RawText);
1775
+ const textField = (vars) => ({
1776
+ [vars.padding]: '0 1em',
2103
1777
 
2104
- const componentName$d = getComponentName('link');
1778
+ [vars.outlineWidth]: '2px',
1779
+ [vars.outlineStyle]: 'solid',
1780
+ [vars.outlineColor]: 'transparent',
2105
1781
 
2106
- class RawLink extends createBaseClass({ componentName: componentName$d, baseSelector: ':host a' }) {
2107
- constructor() {
2108
- super();
1782
+ [vars.height]: '2em',
2109
1783
 
2110
- this.attachShadow({ mode: 'open' }).innerHTML = `
2111
- <style>
2112
- :host {
2113
- display: inline-block;
2114
- }
2115
- :host a {
2116
- display: inline-block;
1784
+ size: {
1785
+ xs: {
1786
+ [vars.fontSize]: '8px',
1787
+ },
1788
+ sm: {
1789
+ [vars.fontSize]: '10px',
1790
+ },
1791
+ md: {
1792
+ [vars.fontSize]: '14px',
1793
+ },
1794
+ lg: {
1795
+ [vars.fontSize]: '20px',
1796
+ },
1797
+ xl: {
1798
+ [vars.fontSize]: '25px',
2117
1799
  }
2118
- </style>
2119
- <div>
2120
- <a>
2121
- <descope-text>
2122
- <slot></slot>
2123
- </descope-text>
2124
- </a>
2125
- </div>
2126
- `;
1800
+ },
2127
1801
 
2128
- forwardAttrs(this, this.shadowRoot.querySelector('a'), {
2129
- includeAttrs: ['href', 'target', 'tooltip'],
2130
- mapAttrs: {
2131
- tooltip: 'title'
1802
+ [vars.color]: globalRefs$d.colors.surface.contrast,
1803
+ [vars.labelTextColor]: globalRefs$d.colors.surface.contrast,
1804
+ [vars.placeholderColor]: globalRefs$d.colors.surface.main,
1805
+
1806
+ [vars.backgroundColor]: globalRefs$d.colors.surface.light,
1807
+
1808
+ [vars.borderWidth]: '1px',
1809
+ [vars.borderStyle]: 'solid',
1810
+ [vars.borderColor]: 'transparent',
1811
+ [vars.borderRadius]: globalRefs$d.radius.xs,
1812
+
1813
+ _disabled: {
1814
+ [vars.color]: globalRefs$d.colors.surface.dark,
1815
+ [vars.placeholderColor]: globalRefs$d.colors.surface.light,
1816
+ [vars.backgroundColor]: globalRefs$d.colors.surface.main
1817
+ },
1818
+
1819
+ _fullWidth: {
1820
+ [vars.width]: '100%'
1821
+ },
1822
+
1823
+ _focused: {
1824
+ [vars.outlineColor]: globalRefs$d.colors.surface.main
1825
+ },
1826
+
1827
+ _bordered: {
1828
+ [vars.borderColor]: globalRefs$d.colors.surface.main
1829
+ },
1830
+
1831
+ _invalid: {
1832
+ [vars.borderColor]: globalRefs$d.colors.error.main,
1833
+ [vars.color]: globalRefs$d.colors.error.main,
1834
+ [vars.outlineColor]: globalRefs$d.colors.error.light,
1835
+ [vars.placeholderColor]: globalRefs$d.colors.error.light
1836
+ }
1837
+ });
1838
+
1839
+ var textField$1 = textField(vars$j);
1840
+
1841
+ var textField$2 = /*#__PURE__*/Object.freeze({
1842
+ __proto__: null,
1843
+ default: textField$1,
1844
+ textField: textField,
1845
+ vars: vars$j
1846
+ });
1847
+
1848
+ const passwordDraggableMixin = (superclass) => class PasswordDraggableMixinClass extends superclass {
1849
+ get isReadOnly() {
1850
+ return this.hasAttribute('readonly') && this.getAttribute('readonly') !== 'false'
1851
+ }
1852
+
1853
+ init() {
1854
+ // there is an issue in Chrome that input field with type password cannot be D&D
1855
+ // so in case the input is draggable & readonly, we are changing the input type to "text" before dragging
1856
+ // and return the original type when done
1857
+ this.addEventListener('mousedown', (e) => {
1858
+ if (this.isDraggable & this.isReadOnly) {
1859
+ const inputEle = this.baseElement.querySelector('input');
1860
+ const prevType = inputEle.getAttribute('type');
1861
+
1862
+ inputEle.setAttribute('type', 'text');
1863
+ setTimeout(() => inputEle.focus());
1864
+
1865
+ const onComplete = (e) => {
1866
+ inputEle.setAttribute('type', prevType);
1867
+
1868
+ e.target.removeEventListener('mouseup', onComplete);
1869
+ e.target.removeEventListener('dragend', onComplete);
1870
+ };
1871
+
1872
+ e.target.addEventListener('mouseup', onComplete, { once: true });
1873
+ e.target.addEventListener('dragend', onComplete, { once: true });
2132
1874
  }
2133
1875
  });
2134
1876
 
2135
- forwardAttrs(this, this.shadowRoot.querySelector('descope-text'), {
2136
- includeAttrs: ['mode', 'variant'],
2137
- });
1877
+ super.init?.();
2138
1878
  }
2139
- }
1879
+ };
2140
1880
 
2141
- const selectors = {
1881
+ const componentName$l = getComponentName('password-field');
1882
+
1883
+ const {
1884
+ host: host$9,
1885
+ inputWrapper: inputWrapper$1,
1886
+ inputElement,
1887
+ inputElementPlaceholder,
1888
+ revealButton,
1889
+ revealButtonIcon,
1890
+ revealButtonIconOutline,
1891
+ label: label$6,
1892
+ requiredIndicator: requiredIndicator$5
1893
+ } = {
2142
1894
  host: { selector: () => ':host' },
2143
- anchor: {},
2144
- wrapper: { selector: () => ':host > div' },
2145
- text: { selector: () => TextClass.componentName }
1895
+ inputWrapper: { selector: '::part(input-field)' },
1896
+ inputElement: { selector: '> input' },
1897
+ inputElementPlaceholder: { selector: '> input:placeholder-shown' },
1898
+ revealButton: { selector: 'vaadin-password-field-button' },
1899
+ revealButtonIcon: { selector: () => '::part(reveal-button)::before' },
1900
+ revealButtonIconOutline: { selector: () => 'vaadin-password-field-button[focus-ring]' },
1901
+ label: { selector: '::part(label)' },
1902
+ requiredIndicator: { selector: '::part(required-indicator)::after' },
2146
1903
  };
2147
1904
 
2148
- const { anchor, text, host: host$5, wrapper } = selectors;
2149
-
2150
- const LinkClass = compose(
1905
+ const PasswordFieldClass = compose(
2151
1906
  createStyleMixin({
2152
1907
  mappings: {
2153
- width: host$5,
2154
- textAlign: wrapper,
2155
- color: [anchor, { ...text, property: TextClass.cssVarList.color }],
2156
- cursor: anchor,
2157
- borderBottomWidth: anchor,
2158
- borderBottomStyle: anchor,
2159
- borderBottomColor: anchor
2160
- },
1908
+ width: host$9,
1909
+ wrapperBorderStyle: { ...inputWrapper$1, property: 'border-style' },
1910
+ wrapperBorderWidth: { ...inputWrapper$1, property: 'border-width' },
1911
+ wrapperBorderColor: { ...inputWrapper$1, property: 'border-color' },
1912
+ wrapperBorderRadius: { ...inputWrapper$1, property: 'border-radius' },
1913
+
1914
+ revealButtonOutlineBoxShadow: [
1915
+ {
1916
+ ...revealButtonIconOutline,
1917
+ property: 'box-shadow'
1918
+ }
1919
+ ],
1920
+
1921
+ labelTextColor: [
1922
+ { ...label$6, property: 'color' },
1923
+ { ...requiredIndicator$5, property: 'color' }
1924
+ ],
1925
+ inputTextColor: [
1926
+ { ...inputElement, property: 'color' },
1927
+ { ...revealButtonIcon, property: 'color' }
1928
+ ],
1929
+ placeholderTextColor: { ...inputElementPlaceholder, property: 'color' },
1930
+ fontSize: [{}, host$9],
1931
+ height: inputWrapper$1,
1932
+ padding: inputWrapper$1,
1933
+ pointerCursor: [
1934
+ { ...revealButton, property: 'cursor' },
1935
+ { ...label$6, property: 'cursor' },
1936
+ { ...requiredIndicator$5, property: 'cursor' }
1937
+ ],
1938
+ outlineColor: inputWrapper$1,
1939
+ outlineStyle: inputWrapper$1,
1940
+ outlineWidth: [
1941
+ inputWrapper$1,
1942
+ // we need to make sure there is enough space for the outline
1943
+ { property: 'padding' }
1944
+ ],
1945
+ backgroundColor: inputWrapper$1
1946
+ }
2161
1947
  }),
2162
1948
  draggableMixin,
2163
- componentNameValidationMixin
2164
- )(RawLink);
1949
+ proxyInputMixin,
1950
+ componentNameValidationMixin,
1951
+ passwordDraggableMixin
1952
+ )(
1953
+ createProxy({
1954
+ slots: ['suffix'],
1955
+ wrappedEleName: 'vaadin-password-field',
1956
+ style: `
1957
+ :host {
1958
+ display: inline-block;
1959
+ min-width: 10em;
1960
+ max-width: 100%;
1961
+ }
1962
+ vaadin-password-field {
1963
+ width: 100%;
1964
+ box-sizing: border-box;
1965
+ }
1966
+ vaadin-password-field::part(input-field) {
1967
+ padding: 0;
1968
+ }
1969
+ vaadin-password-field > input {
1970
+ min-height: 0;
1971
+ -webkit-mask-image: none;
1972
+ }
1973
+ vaadin-password-field[readonly] > input:placeholder-shown {
1974
+ opacity: 1;
1975
+ }
1976
+ vaadin-password-field::before {
1977
+ height: initial;
1978
+ }
1979
+ vaadin-password-field::part(input-field)::after {
1980
+ opacity: 0;
1981
+ }
1982
+ vaadin-password-field[required]::part(required-indicator)::after {
1983
+ content: "*";
1984
+ }
1985
+ [readonly] vaadin-password-field-button {
1986
+ pointer-events: none;
1987
+ }
1988
+ `,
1989
+ excludeAttrsSync: ['tabindex'],
1990
+ componentName: componentName$l
1991
+ })
1992
+ );
2165
1993
 
2166
- const componentName$c = getComponentName('logo');
1994
+ const globalRefs$c = getThemeRefs(globals);
2167
1995
 
2168
- let style;
2169
- const getStyle = () => style;
1996
+ const vars$i = PasswordFieldClass.cssVarList;
2170
1997
 
2171
- class RawLogo extends createBaseClass({ componentName: componentName$c, baseSelector: ':host > div' }) {
2172
- constructor() {
2173
- super();
1998
+ const passwordField = {
1999
+ [vars$i.wrapperBorderStyle]: 'solid',
2000
+ [vars$i.wrapperBorderWidth]: '1px',
2001
+ [vars$i.wrapperBorderColor]: 'transparent',
2002
+ [vars$i.wrapperBorderRadius]: globalRefs$c.radius.xs,
2003
+ [vars$i.backgroundColor]: globalRefs$c.colors.surface.light,
2174
2004
 
2175
- this.attachShadow({ mode: 'open' }).innerHTML = `
2176
- <style>
2177
- ${getStyle()}
2178
- </style>
2179
- <div></div>`;
2180
- }
2181
- }
2005
+ [vars$i.outlineWidth]: '2px',
2006
+ [vars$i.outlineStyle]: 'solid',
2007
+ [vars$i.outlineColor]: 'transparent',
2182
2008
 
2183
- const LogoClass = compose(
2184
- createStyleMixin({
2185
- mappings: {
2186
- height: { selector: () => ':host' },
2187
- width: { selector: () => ':host' },
2188
- fallbackUrl: { property: 'content' },
2189
- url: { property: 'content' },
2009
+ [vars$i.revealButtonOutlineBoxShadow]: `0 0 0 2px ${globalRefs$c.colors.surface.main}`,
2010
+
2011
+
2012
+ [vars$i.labelTextColor]: globalRefs$c.colors.surface.contrast,
2013
+ [vars$i.inputTextColor]: globalRefs$c.colors.surface.contrast,
2014
+ [vars$i.placeholderTextColor]: globalRefs$c.colors.surface.main,
2015
+
2016
+ [vars$i.pointerCursor]: 'pointer',
2017
+
2018
+ [vars$i.padding]: '0',
2019
+ [vars$i.height]: '2em',
2020
+
2021
+ size: {
2022
+ xs: {
2023
+ [vars$i.fontSize]: '8px',
2024
+ },
2025
+ sm: {
2026
+ [vars$i.fontSize]: '10px',
2027
+ },
2028
+ md: {
2029
+ [vars$i.fontSize]: '14px',
2030
+ },
2031
+ lg: {
2032
+ [vars$i.fontSize]: '20px',
2033
+ },
2034
+ xl: {
2035
+ [vars$i.fontSize]: '25px',
2190
2036
  }
2191
- }),
2192
- draggableMixin,
2193
- componentNameValidationMixin
2194
- )(RawLogo);
2037
+ },
2195
2038
 
2196
- style = `
2197
- :host {
2198
- display: inline-flex;
2199
- }
2200
- :host > div {
2201
- display: inline-block;
2202
- content: var(${LogoClass.cssVarList.url}, var(${LogoClass.cssVarList.fallbackUrl}));
2203
- max-width: 100%;
2204
- max-height: 100%;
2205
- object-fit: contain;
2206
- margin: auto;
2207
- }
2208
- :host([draggable="true"]) > div {
2209
- pointer-events: none
2210
- }
2211
- `;
2039
+ _bordered: {
2040
+ [vars$i.padding]: '0 0.5em',
2041
+ [vars$i.wrapperBorderColor]: globalRefs$c.colors.surface.main
2042
+ },
2043
+
2044
+ _fullWidth: {
2045
+ [vars$i.width]: '100%'
2046
+ },
2047
+
2048
+ _focused: {
2049
+ [vars$i.outlineColor]: globalRefs$c.colors.surface.main
2050
+ },
2051
+
2052
+ _invalid: {
2053
+ [vars$i.labelTextColor]: globalRefs$c.colors.error.main,
2054
+ [vars$i.inputTextColor]: globalRefs$c.colors.error.main,
2055
+ [vars$i.placeholderTextColor]: globalRefs$c.colors.error.light,
2056
+ [vars$i.wrapperBorderColor]: globalRefs$c.colors.error.main,
2057
+ [vars$i.outlineColor]: globalRefs$c.colors.error.light,
2058
+ },
2059
+ };
2212
2060
 
2213
- const componentName$b = getComponentName('number-field');
2061
+ var passwordField$1 = /*#__PURE__*/Object.freeze({
2062
+ __proto__: null,
2063
+ default: passwordField,
2064
+ vars: vars$i
2065
+ });
2066
+
2067
+ const componentName$k = getComponentName('number-field');
2214
2068
 
2215
2069
  let overrides$3 = ``;
2216
2070
 
@@ -2229,7 +2083,7 @@ const NumberFieldClass = compose(
2229
2083
  wrappedEleName: 'vaadin-number-field',
2230
2084
  style: () => overrides$3,
2231
2085
  excludeAttrsSync: ['tabindex'],
2232
- componentName: componentName$b
2086
+ componentName: componentName$k
2233
2087
  })
2234
2088
  );
2235
2089
 
@@ -2270,498 +2124,1946 @@ overrides$3 = `
2270
2124
  }
2271
2125
  `;
2272
2126
 
2273
- const componentName$a = getComponentName('passcode-internal');
2127
+ const numberField = {
2128
+ ...textField(NumberFieldClass.cssVarList)
2129
+ };
2130
+ const vars$h = NumberFieldClass.cssVarList;
2274
2131
 
2275
- createBaseInputClass({ componentName: componentName$a, baseSelector: 'div' });
2132
+ var numberField$1 = /*#__PURE__*/Object.freeze({
2133
+ __proto__: null,
2134
+ default: numberField,
2135
+ vars: vars$h
2136
+ });
2276
2137
 
2277
- const componentName$9 = getComponentName('text-field');
2138
+ const componentName$j = getComponentName('email-field');
2278
2139
 
2279
2140
  let overrides$2 = ``;
2280
2141
 
2281
- const observedAttrs = ['type'];
2282
-
2283
- const customMixin$3 = (superclass) =>
2284
- class TextFieldClass extends superclass {
2285
- static get observedAttributes() {
2286
- return observedAttrs.concat(superclass.observedAttributes || []);
2287
- }
2288
-
2289
- attributeChangedCallback(attrName, oldVal, newVal) {
2290
- super.attributeChangeCallback?.(attrName, oldVal, newVal);
2291
-
2292
- // Vaadin doesn't allow to change the input type attribute.
2293
- // We need the ability to do that, so we're overriding their
2294
- // behavior with their private API.
2295
- // When receiving a `type` attribute, we use their private API
2296
- // to set it on the input.
2297
- if (attrName === 'type') {
2298
- this.baseElement._setType(newVal);
2299
- }
2300
- }
2301
- };
2302
-
2303
- const TextFieldClass = compose(
2142
+ const EmailFieldClass = compose(
2304
2143
  createStyleMixin({
2305
- mappings: textFieldMappings
2144
+ mappings: {
2145
+ ...textFieldMappings
2146
+ }
2306
2147
  }),
2307
2148
  draggableMixin,
2308
2149
  proxyInputMixin,
2309
- componentNameValidationMixin,
2310
- customMixin$3
2150
+ componentNameValidationMixin
2311
2151
  )(
2312
2152
  createProxy({
2313
- slots: ['prefix', 'suffix'],
2314
- wrappedEleName: 'vaadin-text-field',
2153
+ slots: ['suffix'],
2154
+ wrappedEleName: 'vaadin-email-field',
2315
2155
  style: () => overrides$2,
2316
2156
  excludeAttrsSync: ['tabindex'],
2317
- componentName: componentName$9
2157
+ componentName: componentName$j
2318
2158
  })
2319
2159
  );
2320
2160
 
2321
2161
  overrides$2 = `
2322
2162
  :host {
2323
2163
  display: inline-block;
2324
- --vaadin-field-default-width: auto;
2325
- max-width: 100%;
2326
2164
  min-width: 10em;
2327
-
2165
+ max-width: 100%;
2328
2166
  }
2329
- vaadin-text-field {
2167
+ vaadin-email-field {
2330
2168
  margin: 0;
2331
2169
  width: 100%;
2332
- height: 100%;
2333
2170
  box-sizing: border-box;
2334
2171
  }
2335
-
2336
- vaadin-text-field::part(input-field) {
2172
+ vaadin-email-field::before {
2173
+ height: 0;
2174
+ }
2175
+ vaadin-email-field > input {
2176
+ -webkit-mask-image: none;
2177
+ }
2178
+ vaadin-email-field::part(input-field) {
2337
2179
  overflow: hidden;
2338
2180
  padding: 0;
2339
2181
  }
2340
- vaadin-text-field[disabled] > input:placeholder-shown,
2341
- vaadin-text-field[readonly] > input:placeholder-shown {
2182
+ vaadin-email-field[readonly] > input:placeholder-shown {
2342
2183
  opacity: 1;
2343
2184
  }
2344
- vaadin-text-field input:-webkit-autofill,
2345
- vaadin-text-field input:-webkit-autofill::first-line,
2346
- vaadin-text-field input:-webkit-autofill:hover,
2347
- vaadin-text-field input:-webkit-autofill:active,
2348
- vaadin-text-field input:-webkit-autofill:focus {
2349
- -webkit-text-fill-color: var(${TextFieldClass.cssVarList.color});
2350
- box-shadow: 0 0 0 var(${TextFieldClass.cssVarList.height}) var(${TextFieldClass.cssVarList.backgroundColor}) inset;
2351
- }
2352
-
2353
- vaadin-text-field > input {
2354
- -webkit-mask-image: none;
2355
- min-height: 0;
2185
+ vaadin-email-field input:-webkit-autofill,
2186
+ vaadin-email-field input:-webkit-autofill::first-line,
2187
+ vaadin-email-field input:-webkit-autofill:hover,
2188
+ vaadin-email-field input:-webkit-autofill:active,
2189
+ vaadin-email-field input:-webkit-autofill:focus {
2190
+ -webkit-text-fill-color: var(${EmailFieldClass.cssVarList.color});
2191
+ box-shadow: 0 0 0 var(${EmailFieldClass.cssVarList.height}) var(${EmailFieldClass.cssVarList.backgroundColor}) inset;
2356
2192
  }
2357
-
2358
- vaadin-text-field[required]::part(required-indicator)::after {
2193
+ vaadin-email-field[required]::part(required-indicator)::after {
2359
2194
  content: "*";
2360
- color: var(${TextFieldClass.cssVarList.color});
2361
- }
2362
- vaadin-text-field::part(input-field)::after {
2363
- opacity: 0 !important;
2195
+ color: var(${EmailFieldClass.cssVarList.color});
2364
2196
  }
2365
-
2366
- vaadin-text-field::before {
2367
- height: unset;
2197
+ vaadin-email-field[readonly]::part(input-field)::after {
2198
+ border: 0 solid;
2368
2199
  }
2369
2200
  `;
2370
2201
 
2371
- const componentName$8 = getComponentName('passcode');
2372
-
2373
- const observedAttributes$1 = [
2374
- 'digits'
2375
- ];
2376
-
2377
- const customMixin$2 = (superclass) =>
2378
- class PasscodeMixinClass extends superclass {
2379
- static get observedAttributes() {
2380
- return observedAttributes$1.concat(superclass.observedAttributes || []);
2381
- }
2382
-
2383
- constructor() {
2384
- super();
2385
- }
2386
-
2387
- get digits() {
2388
- return Number.parseInt(this.getAttribute('digits')) || 6;
2389
- }
2390
-
2391
- init() {
2392
- super.init?.();
2393
- const template = document.createElement('template');
2394
-
2395
- template.innerHTML = `
2396
- <${componentName$a}
2397
- bordered="true"
2398
- name="code"
2399
- tabindex="-1"
2400
- slot="input"
2401
- ></${componentName$a}>
2402
- `;
2403
-
2404
- this.baseElement.appendChild(template.content.cloneNode(true));
2405
-
2406
- this.inputElement = this.shadowRoot.querySelector(componentName$a);
2407
-
2408
- forwardAttrs(this, this.inputElement, { includeAttrs: ['digits', 'size'] });
2409
- }
2410
-
2411
- attributeChangedCallback(attrName, oldValue, newValue) {
2412
- super.attributeChangedCallback?.(attrName, oldValue, newValue);
2202
+ const emailField = {
2203
+ ...textField(EmailFieldClass.cssVarList)
2204
+ };
2205
+ const vars$g = EmailFieldClass.cssVarList;
2413
2206
 
2414
- if (attrName === 'digits') {
2415
- this.style.setProperty('--passcode-digits-count', newValue);
2416
- }
2417
- }
2418
- };
2207
+ var emailField$1 = /*#__PURE__*/Object.freeze({
2208
+ __proto__: null,
2209
+ default: emailField,
2210
+ vars: vars$g
2211
+ });
2419
2212
 
2420
- const { borderStyle, borderWidth, ...restTextFieldMappings } =
2421
- textFieldMappings;
2213
+ const componentName$i = getComponentName('text-area');
2422
2214
 
2423
- const { digitField, label: label$4, requiredIndicator: requiredIndicator$3, internalWrapper, focusedDigitField } = {
2424
- focusedDigitField: { selector: () => `${TextFieldClass.componentName}[focused="true"]` },
2425
- digitField: { selector: () => TextFieldClass.componentName },
2215
+ const {
2216
+ host: host$8,
2217
+ placeholder: placeholder$1,
2218
+ input: input$1,
2219
+ textArea: textArea$2,
2220
+ label: label$5,
2221
+ requiredIndicator: requiredIndicator$4
2222
+ } = {
2223
+ host: { selector: () => ':host' },
2224
+ textArea: { selector: '> textarea' },
2426
2225
  label: { selector: '::part(label)' },
2427
- requiredIndicator: { selector: '[required]::part(required-indicator)::after' },
2428
- internalWrapper: { selector: 'descope-passcode-internal .wrapper' }
2226
+ input: { selector: '::part(input-field)' },
2227
+ placeholder: { selector: 'textarea:placeholder-shown' },
2228
+ requiredIndicator: { selector: '::part(required-indicator)::after' },
2429
2229
  };
2430
2230
 
2431
- const textVars$1 = TextFieldClass.cssVarList;
2231
+ let overrides$1 = ``;
2432
2232
 
2433
- const PasscodeClass = compose(
2233
+ const TextAreaClass = compose(
2434
2234
  createStyleMixin({
2435
2235
  mappings: {
2436
- ...restTextFieldMappings,
2437
- borderColor: { ...digitField, property: textVars$1.borderColor },
2438
- outlineColor: { ...digitField, property: textVars$1.outlineColor },
2439
- outlineWidth: [
2440
- { ...digitField, property: textVars$1.outlineWidth },
2441
- // we want to leave enough space to the digits outline,
2442
- // ideally, this would be part of the text field
2443
- { ...internalWrapper, property: 'padding' }
2236
+ fontSize: [host$8, textArea$2],
2237
+ resize: textArea$2,
2238
+ color: textArea$2,
2239
+ cursor: {},
2240
+ labelColor: [
2241
+ { ...label$5, property: 'color' },
2242
+ { ...requiredIndicator$4, property: 'color' }
2444
2243
  ],
2445
- color: [restTextFieldMappings.color, label$4, requiredIndicator$3],
2446
- padding: { ...digitField, property: textVars$1.padding },
2447
- margin: { ...digitField, property: textVars$1.margin },
2448
- textAlign: { ...digitField, property: textVars$1.textAlign },
2449
- caretColor: { ...digitField, property: textVars$1.caretColor },
2450
- digitsGap: { ...internalWrapper, property: 'gap' },
2451
- focusedDigitFieldOutlineColor: { ...focusedDigitField, property: textVars$1.outlineColor }
2452
- },
2244
+ placeholderColor: { ...placeholder$1, property: 'color' },
2245
+ width: host$8,
2246
+ backgroundColor: input$1,
2247
+ borderWidth: input$1,
2248
+ borderStyle: input$1,
2249
+ borderColor: input$1,
2250
+ borderRadius: input$1,
2251
+ outlineWidth: [input$1, { property: 'padding' }],
2252
+ outlineStyle: input$1,
2253
+ outlineColor: input$1,
2254
+ outlineOffset: input$1,
2255
+ }
2453
2256
  }),
2454
2257
  draggableMixin,
2455
2258
  proxyInputMixin,
2456
- componentNameValidationMixin,
2457
- customMixin$2
2259
+ componentNameValidationMixin
2458
2260
  )(
2459
2261
  createProxy({
2460
2262
  slots: [],
2461
- wrappedEleName: 'vaadin-text-field',
2462
- style: () => `
2463
- :host {
2464
- --vaadin-field-default-width: auto;
2465
- display: inline-block;
2466
- max-width: 100%;
2467
- min-width: calc(var(--passcode-digits-count) * 2em);
2468
- }
2469
- :host::after {
2470
- background-color: transparent;
2471
- }
2472
- :host::part(input-field)::after {
2473
- background-color: transparent;
2474
- }
2263
+ wrappedEleName: 'vaadin-text-area',
2264
+ style: () => overrides$1,
2265
+ excludeAttrsSync: ['tabindex'],
2266
+ componentName: componentName$i
2267
+ })
2268
+ );
2475
2269
 
2476
- descope-passcode-internal {
2477
- -webkit-mask-image: none;
2478
- padding: 0;
2479
- width: 100%;
2480
- height: 100%;
2481
- min-height: initial;
2482
- }
2270
+ overrides$1 = `
2271
+ :host {
2272
+ display: inline-block;
2273
+ min-width: 10em;
2274
+ max-width: 100%;
2275
+ }
2276
+ vaadin-text-area {
2277
+ margin: 0;
2278
+ width: 100%;
2279
+ box-sizing: border-box;
2280
+ }
2281
+ vaadin-text-area > label,
2282
+ vaadin-text-area::part(input-field) {
2283
+ padding: 0;
2284
+ }
2285
+ vaadin-text-area[required]::part(required-indicator)::after {
2286
+ content: "*";
2287
+ }
2288
+ vaadin-text-area[disabled] > textarea:placeholder-shown,
2289
+ vaadin-text-area[readonly] > textarea:placeholder-shown {
2290
+ opacity: 1;
2291
+ }
2292
+ `;
2483
2293
 
2484
- descope-passcode-internal .wrapper {
2485
- box-sizing: border-box;
2486
- min-height: initial;
2487
- height: 100%;
2488
- justify-content: space-between;
2489
- }
2294
+ const globalRefs$b = getThemeRefs(globals);
2295
+ const vars$f = TextAreaClass.cssVarList;
2490
2296
 
2491
- descope-passcode-internal descope-text-field {
2492
- min-width: 2em;
2493
- max-width: var(${textVars$1.height});
2494
- }
2297
+ const textArea = {
2298
+ [vars$f.labelColor]: globalRefs$b.colors.surface.contrast,
2299
+ [vars$f.placeholderColor]: globalRefs$b.colors.surface.main,
2300
+ [vars$f.color]: globalRefs$b.colors.surface.contrast,
2301
+ [vars$f.fontSize]: '14px',
2495
2302
 
2496
- vaadin-text-field::part(input-field) {
2497
- background-color: transparent;
2498
- padding: 0;
2499
- overflow: hidden;
2500
- -webkit-mask-image: none;
2501
- }
2303
+ [vars$f.backgroundColor]: globalRefs$b.colors.surface.light,
2304
+ [vars$f.resize]: 'vertical',
2502
2305
 
2503
- vaadin-text-field {
2504
- margin: 0;
2505
- padding: 0;
2506
- width: 100%
2507
- }
2306
+ [vars$f.borderRadius]: globalRefs$b.radius.sm,
2307
+ [vars$f.borderWidth]: '1px',
2308
+ [vars$f.borderStyle]: 'solid',
2309
+ [vars$f.borderColor]: 'transparent',
2310
+ [vars$f.outlineWidth]: '2px',
2311
+ [vars$f.outlineStyle]: 'solid',
2312
+ [vars$f.outlineColor]: 'transparent',
2313
+ [vars$f.outlineOffset]: '0',
2508
2314
 
2509
- vaadin-text-field::before {
2510
- height: 0;
2511
- }
2315
+ _fullWidth: {
2316
+ [vars$f.width]: '100%'
2317
+ },
2512
2318
 
2513
- vaadin-text-field[readonly] > input:placeholder-shown {
2514
- opacity: 1;
2515
- }
2319
+ _focused: {
2320
+ [vars$f.outlineColor]: globalRefs$b.colors.surface.main
2321
+ },
2516
2322
 
2517
- vaadin-text-field::part(input-field):focus {
2518
- cursor: text;
2519
- }
2323
+ _disabled: {
2324
+ [vars$f.cursor]: 'not-allowed'
2325
+ },
2520
2326
 
2521
- vaadin-text-field[required]::part(required-indicator)::after {
2522
- content: "*";
2523
- }
2524
- vaadin-text-field[readonly]::part(input-field)::after {
2525
- border: 0 solid;
2526
- }
2527
- `,
2528
- excludeAttrsSync: ['tabindex'],
2529
- componentName: componentName$8
2530
- })
2531
- );
2327
+ _bordered: {
2328
+ [vars$f.borderColor]: globalRefs$b.colors.surface.main,
2329
+ },
2532
2330
 
2533
- const passwordDraggableMixin = (superclass) => class PasswordDraggableMixinClass extends superclass {
2534
- get isReadOnly() {
2535
- return this.hasAttribute('readonly') && this.getAttribute('readonly') !== 'false'
2331
+ _invalid: {
2332
+ [vars$f.labelColor]: globalRefs$b.colors.error.main,
2333
+ [vars$f.borderColor]: globalRefs$b.colors.error.main,
2334
+ [vars$f.outlineColor]: globalRefs$b.colors.error.light,
2335
+ [vars$f.placeholderColor]: globalRefs$b.colors.error.light,
2336
+ },
2337
+
2338
+ _readonly: {
2339
+ [vars$f.resize]: 'none',
2536
2340
  }
2341
+ };
2537
2342
 
2538
- init() {
2539
- // there is an issue in Chrome that input field with type password cannot be D&D
2540
- // so in case the input is draggable & readonly, we are changing the input type to "text" before dragging
2541
- // and return the original type when done
2542
- this.addEventListener('mousedown', (e) => {
2543
- if (this.isDraggable & this.isReadOnly) {
2544
- const inputEle = this.baseElement.querySelector('input');
2545
- const prevType = inputEle.getAttribute('type');
2343
+ var textArea$1 = /*#__PURE__*/Object.freeze({
2344
+ __proto__: null,
2345
+ default: textArea,
2346
+ vars: vars$f
2347
+ });
2546
2348
 
2547
- inputEle.setAttribute('type', 'text');
2548
- setTimeout(() => inputEle.focus());
2349
+ const createBaseInputClass = (...args) => compose(
2350
+ inputValidationMixin,
2351
+ changeMixin,
2352
+ normalizeBooleanAttributesMixin,
2353
+ inputEventsDispatchingMixin
2354
+ )(createBaseClass(...args));
2549
2355
 
2550
- const onComplete = (e) => {
2551
- inputEle.setAttribute('type', prevType);
2356
+ const componentName$h = getComponentName('boolean-field-internal');
2552
2357
 
2553
- e.target.removeEventListener('mouseup', onComplete);
2554
- e.target.removeEventListener('dragend', onComplete);
2555
- };
2358
+ createBaseInputClass({ componentName: componentName$h, baseSelector: 'div' });
2556
2359
 
2557
- e.target.addEventListener('mouseup', onComplete, { once: true });
2558
- e.target.addEventListener('dragend', onComplete, { once: true });
2559
- }
2560
- });
2360
+ const booleanFieldMixin = (superclass) =>
2361
+ class BooleanFieldMixinClass extends superclass {
2362
+ constructor() {
2363
+ super();
2364
+ }
2561
2365
 
2562
- super.init?.();
2563
- }
2564
- };
2366
+ init() {
2367
+ super.init?.();
2368
+
2369
+ const template = document.createElement('template');
2370
+ template.innerHTML = `
2371
+ <${componentName$h}
2372
+ tabindex="-1"
2373
+ slot="input"
2374
+ ></${componentName$h}>
2375
+ `;
2376
+
2377
+ this.baseElement.appendChild(template.content.cloneNode(true));
2378
+ this.inputElement = this.shadowRoot.querySelector(componentName$h);
2379
+ this.checkbox = this.inputElement.querySelector('vaadin-checkbox');
2380
+
2381
+ forwardAttrs(this, this.inputElement, {
2382
+ includeAttrs: [
2383
+ 'required',
2384
+ 'full-width',
2385
+ 'size',
2386
+ 'label',
2387
+ 'invalid',
2388
+ ]
2389
+ });
2390
+
2391
+ forwardProps(this.inputElement, this, ['checked']);
2392
+ syncAttrs(this, this.inputElement, { includeAttrs: ['checked'] });
2393
+ }
2394
+ };
2395
+
2396
+ var commonStyles = `
2397
+ :host {
2398
+ --vaadin-field-default-width: auto;
2399
+ display: inline-flex;
2400
+ }
2401
+ .wrapper {
2402
+ display: flex;
2403
+ }
2404
+
2405
+ vaadin-text-field {
2406
+ position: relative;
2407
+ padding: 0;
2408
+ display: inline-flex;
2409
+ align-items: flex-start;
2410
+ }
2411
+ vaadin-text-field::before {
2412
+ height: 0;
2413
+ margin: 0;
2414
+ }
2415
+ vaadin-text-field::part(label) {
2416
+ position: absolute;
2417
+ top: 0;
2418
+ }
2419
+ vaadin-text-field::part(input-field) {
2420
+ padding: 0;
2421
+ background: none;
2422
+ min-height: 0;
2423
+ }
2424
+ vaadin-text-field::part(input-field)::after {
2425
+ background: none;
2426
+ }
2427
+ vaadin-text-field[focus-ring]::part(input-field) {
2428
+ box-shadow: none;
2429
+ }
2430
+ vaadin-text-field[required]::part(required-indicator)::after {
2431
+ content: "*";
2432
+ }
2433
+
2434
+ vaadin-checkbox [slot="label"] {
2435
+ align-self: flex-start;
2436
+ opacity: 0;
2437
+ padding: 0;
2438
+ }
2439
+ [required] vaadin-checkbox [slot="label"] {
2440
+ padding-right: 1em;
2441
+ }
2442
+ vaadin-checkbox::part(checkbox) {
2443
+ margin: 0;
2444
+ }
2445
+ vaadin-checkbox[focus-ring]::part(checkbox) {
2446
+ box-shadow: none;
2447
+ }
2448
+
2449
+ descope-boolean-field-internal {
2450
+ -webkit-mask-image: none;
2451
+ min-height: 0;
2452
+ padding: 0;
2453
+ }
2454
+ `;
2565
2455
 
2566
- const componentName$7 = getComponentName('password-field');
2456
+ const componentName$g = getComponentName('checkbox');
2567
2457
 
2568
2458
  const {
2569
- host: host$4,
2570
- inputWrapper: inputWrapper$1,
2571
- inputElement,
2572
- inputElementPlaceholder,
2573
- revealButton,
2574
- revealButtonIcon,
2575
- revealButtonIconOutline,
2576
- label: label$3,
2577
- requiredIndicator: requiredIndicator$2
2459
+ host: host$7,
2460
+ component: component$1,
2461
+ checkboxElement,
2462
+ checkboxSurface,
2463
+ checkboxHiddenLabel: checkboxHiddenLabel$1,
2464
+ label: label$4,
2465
+ requiredIndicator: requiredIndicator$3
2578
2466
  } = {
2579
2467
  host: { selector: () => ':host' },
2580
- inputWrapper: { selector: '::part(input-field)' },
2581
- inputElement: { selector: '> input' },
2582
- inputElementPlaceholder: { selector: '> input:placeholder-shown' },
2583
- revealButton: { selector: 'vaadin-password-field-button' },
2584
- revealButtonIcon: { selector: () => '::part(reveal-button)::before' },
2585
- revealButtonIconOutline: { selector: () => 'vaadin-password-field-button[focus-ring]' },
2586
2468
  label: { selector: '::part(label)' },
2587
2469
  requiredIndicator: { selector: '::part(required-indicator)::after' },
2470
+ component: { selector: 'vaadin-checkbox' },
2471
+ checkboxElement: { selector: 'vaadin-checkbox::part(checkbox)' },
2472
+ checkboxSurface: { selector: 'vaadin-checkbox::part(checkbox)::after' },
2473
+ checkboxHiddenLabel: { selector: 'vaadin-checkbox [slot="label"]' },
2588
2474
  };
2589
2475
 
2590
- const PasswordFieldClass = compose(
2476
+ const CheckboxClass = compose(
2591
2477
  createStyleMixin({
2592
2478
  mappings: {
2593
- width: host$4,
2594
- wrapperBorderStyle: { ...inputWrapper$1, property: 'border-style' },
2595
- wrapperBorderWidth: { ...inputWrapper$1, property: 'border-width' },
2596
- wrapperBorderColor: { ...inputWrapper$1, property: 'border-color' },
2597
- wrapperBorderRadius: { ...inputWrapper$1, property: 'border-radius' },
2479
+ width: host$7,
2480
+ cursor: component$1,
2598
2481
 
2599
- revealButtonOutlineBoxShadow: [
2600
- {
2601
- ...revealButtonIconOutline,
2602
- property: 'box-shadow'
2603
- }
2482
+ // Checkbox
2483
+ checkboxBackgroundColor: { ...checkboxElement, property: 'background-color' },
2484
+ checkboxRadius: { ...checkboxElement, property: 'border-radius' },
2485
+
2486
+ checkboxSize: [
2487
+ { ...checkboxElement, property: 'width' },
2488
+ { ...label$4, property: 'margin-left' },
2489
+ { ...checkboxElement, property: 'height' },
2490
+ { ...checkboxSurface, property: 'font-size' },
2491
+ { ...component$1, property: 'font-size' },
2492
+ { ...label$4, property: 'line-height' },
2493
+ { ...checkboxHiddenLabel$1, property: 'line-height' }
2604
2494
  ],
2605
2495
 
2606
- labelTextColor: [
2607
- { ...label$3, property: 'color' },
2608
- { ...requiredIndicator$2, property: 'color' }
2496
+ checkboxOutlineWidth: { ...checkboxElement, property: 'outline-width' },
2497
+ checkboxOutlineOffset: { ...checkboxElement, property: 'outline-offset' },
2498
+ checkboxOutlineColor: { ...checkboxElement, property: 'outline-color' },
2499
+ checkboxOutlineStyle: { ...checkboxElement, property: 'outline-style' },
2500
+
2501
+ // Checkmark
2502
+ checkmarkTextColor: { ...checkboxSurface, property: 'color' },
2503
+
2504
+ // Label
2505
+ labelFontSize: [
2506
+ { ...host$7, property: 'font-size' },
2507
+ { ...checkboxElement, property: 'font-size' },
2508
+ { ...label$4, property: 'font-size' },
2509
+ { ...checkboxHiddenLabel$1, property: 'font-size' }
2609
2510
  ],
2610
- inputTextColor: [
2611
- { ...inputElement, property: 'color' },
2612
- { ...revealButtonIcon, property: 'color' }
2511
+ labelFontWeight: [
2512
+ { ...label$4, property: 'font-weight' },
2513
+ { ...checkboxHiddenLabel$1, property: 'font-weight' }
2613
2514
  ],
2614
- placeholderTextColor: { ...inputElementPlaceholder, property: 'color' },
2615
- fontSize: [{}, host$4],
2616
- height: inputWrapper$1,
2617
- padding: inputWrapper$1,
2618
- pointerCursor: [
2619
- { ...revealButton, property: 'cursor' },
2620
- { ...label$3, property: 'cursor' },
2621
- { ...requiredIndicator$2, property: 'cursor' }
2515
+ labelMargin: [
2516
+ { ...label$4, property: 'left' },
2517
+ { ...checkboxHiddenLabel$1, property: 'padding-left' }
2622
2518
  ],
2623
- outlineColor: inputWrapper$1,
2624
- outlineStyle: inputWrapper$1,
2625
- outlineWidth: [
2626
- inputWrapper$1,
2627
- // we need to make sure there is enough space for the outline
2628
- { property: 'padding' }
2519
+ labelTextColor: [
2520
+ { ...label$4, property: 'color' },
2521
+ { ...requiredIndicator$3, property: 'color' },
2629
2522
  ],
2630
- backgroundColor: inputWrapper$1
2631
- }
2523
+ },
2632
2524
  }),
2633
2525
  draggableMixin,
2634
2526
  proxyInputMixin,
2635
2527
  componentNameValidationMixin,
2636
- passwordDraggableMixin
2528
+ booleanFieldMixin
2637
2529
  )(
2638
2530
  createProxy({
2639
- slots: ['suffix'],
2640
- wrappedEleName: 'vaadin-password-field',
2531
+ slots: [],
2532
+ wrappedEleName: 'vaadin-text-field',
2641
2533
  style: `
2642
- :host {
2643
- display: inline-block;
2644
- min-width: 10em;
2645
- max-width: 100%;
2646
- }
2647
- vaadin-password-field {
2648
- width: 100%;
2649
- box-sizing: border-box;
2650
- }
2651
- vaadin-password-field::part(input-field) {
2652
- padding: 0;
2653
- }
2654
- vaadin-password-field > input {
2655
- min-height: 0;
2656
- -webkit-mask-image: none;
2657
- }
2658
- vaadin-password-field[readonly] > input:placeholder-shown {
2659
- opacity: 1;
2660
- }
2661
- vaadin-password-field::before {
2662
- height: initial;
2663
- }
2664
- vaadin-password-field::part(input-field)::after {
2665
- opacity: 0;
2666
- }
2667
- vaadin-password-field[required]::part(required-indicator)::after {
2668
- content: "*";
2669
- }
2670
- [readonly] vaadin-password-field-button {
2671
- pointer-events: none;
2672
- }
2534
+ ${commonStyles}
2535
+
2536
+ vaadin-checkbox [slot="label"] {
2537
+ height: 100%;
2538
+ cursor: pointer;
2539
+ }
2673
2540
  `,
2674
2541
  excludeAttrsSync: ['tabindex'],
2675
- componentName: componentName$7
2542
+ componentName: componentName$g
2676
2543
  })
2677
2544
  );
2678
2545
 
2679
- const componentName$6 = getComponentName('text-area');
2546
+ const globalRefs$a = getThemeRefs(globals);
2547
+ const vars$e = CheckboxClass.cssVarList;
2548
+
2549
+ const checkbox = {
2550
+ [vars$e.checkboxBackgroundColor]: globalRefs$a.colors.surface.main,
2551
+ [vars$e.cursor]: 'pointer',
2552
+
2553
+ [vars$e.checkboxRadius]: globalRefs$a.radius.xs,
2554
+ [vars$e.checkboxSize]: '2em',
2555
+
2556
+ [vars$e.labelTextColor]: globalRefs$a.colors.surface.contrast,
2557
+ [vars$e.labelMargin]: '0.5em',
2558
+ [vars$e.labelFontWeight]: '400',
2559
+
2560
+ size: {
2561
+ xs: {
2562
+ [vars$e.labelFontSize]: '8px',
2563
+ },
2564
+ sm: {
2565
+ [vars$e.labelFontSize]: '10px',
2566
+ },
2567
+ md: {
2568
+ [vars$e.labelFontSize]: '14px',
2569
+ },
2570
+ lg: {
2571
+ [vars$e.labelFontSize]: '20px',
2572
+ },
2573
+ xl: {
2574
+ [vars$e.labelFontSize]: '25px',
2575
+ }
2576
+ },
2577
+
2578
+ _fullWidth: {
2579
+ [vars$e.width]: '100%',
2580
+ },
2581
+
2582
+ _checked: {
2583
+ [vars$e.checkboxBackgroundColor]: globalRefs$a.colors.primary.main,
2584
+ [vars$e.checkmarkTextColor]: globalRefs$a.colors.primary.contrast,
2585
+ },
2586
+
2587
+ _disabled: {
2588
+ [vars$e.checkboxBackgroundColor]: globalRefs$a.colors.surface.main,
2589
+ },
2590
+
2591
+ _focused: {
2592
+ [vars$e.checkboxOutlineWidth]: '2px',
2593
+ [vars$e.checkboxOutlineOffset]: '1px',
2594
+ [vars$e.checkboxOutlineColor]: globalRefs$a.colors.primary.main,
2595
+ [vars$e.checkboxOutlineStyle]: 'solid'
2596
+ },
2597
+
2598
+ _invalid: {
2599
+ [vars$e.checkboxOutlineColor]: globalRefs$a.colors.error.main,
2600
+ [vars$e.labelTextColor]: globalRefs$a.colors.error.main
2601
+ },
2602
+
2603
+ };
2604
+
2605
+ var checkbox$1 = /*#__PURE__*/Object.freeze({
2606
+ __proto__: null,
2607
+ default: checkbox,
2608
+ vars: vars$e
2609
+ });
2610
+
2611
+ const componentName$f = getComponentName('switch-toggle');
2680
2612
 
2681
2613
  const {
2682
- host: host$3,
2683
- placeholder: placeholder$1,
2684
- input: input$1,
2685
- textArea,
2686
- label: label$2,
2687
- requiredIndicator: requiredIndicator$1
2614
+ host: host$6,
2615
+ component,
2616
+ checkboxElement: track,
2617
+ checkboxSurface: knob,
2618
+ checkboxHiddenLabel,
2619
+ label: label$3,
2620
+ requiredIndicator: requiredIndicator$2,
2688
2621
  } = {
2689
2622
  host: { selector: () => ':host' },
2690
- textArea: { selector: '> textarea' },
2691
2623
  label: { selector: '::part(label)' },
2692
- input: { selector: '::part(input-field)' },
2693
- placeholder: { selector: 'textarea:placeholder-shown' },
2694
2624
  requiredIndicator: { selector: '::part(required-indicator)::after' },
2625
+ component: { selector: 'vaadin-checkbox' },
2626
+ checkboxElement: { selector: 'vaadin-checkbox::part(checkbox)' },
2627
+ checkboxSurface: { selector: 'vaadin-checkbox::part(checkbox)::after' },
2628
+ checkboxHiddenLabel: { selector: 'vaadin-checkbox [slot="label"]' },
2695
2629
  };
2696
2630
 
2697
- let overrides$1 = ``;
2698
-
2699
- const TextAreaClass = compose(
2631
+ const SwitchToggleClass = compose(
2700
2632
  createStyleMixin({
2701
2633
  mappings: {
2702
- fontSize: [host$3, textArea],
2703
- resize: textArea,
2704
- color: textArea,
2705
- cursor: {},
2706
- labelColor: [
2707
- { ...label$2, property: 'color' },
2708
- { ...requiredIndicator$1, property: 'color' }
2634
+ width: host$6,
2635
+ cursor: [component, checkboxHiddenLabel, track],
2636
+ fontSize: [component, label$3, checkboxHiddenLabel],
2637
+
2638
+ // Track
2639
+ trackBorderWidth: { ...track, property: 'border-width' },
2640
+ trackBorderStyle: { ...track, property: 'border-style' },
2641
+ trackBorderColor: { ...track, property: 'border-color' },
2642
+
2643
+ // Checkbox
2644
+ trackBackgroundColor: { ...track, property: 'background-color' },
2645
+ trackRadius: { ...track, property: 'border-radius' },
2646
+
2647
+ trackWidth: [
2648
+ { ...track, property: 'width' },
2709
2649
  ],
2710
- placeholderColor: { ...placeholder$1, property: 'color' },
2711
- width: host$3,
2712
- backgroundColor: input$1,
2713
- borderWidth: input$1,
2714
- borderStyle: input$1,
2715
- borderColor: input$1,
2716
- borderRadius: input$1,
2717
- outlineWidth: [input$1, { property: 'padding' }],
2718
- outlineStyle: input$1,
2719
- outlineColor: input$1,
2720
- outlineOffset: input$1,
2721
- }
2650
+ trackHeight: [
2651
+ { ...knob, property: 'font-size' },
2652
+ { ...track, property: 'height' }
2653
+ ],
2654
+ switchOutlineWidth: { ...track, property: 'outline-width' },
2655
+ switchOutlineOffset: { ...track, property: 'outline-offset' },
2656
+ switchOutlineColor: { ...track, property: 'outline-color' },
2657
+ switchOutlineStyle: { ...track, property: 'outline-style' },
2658
+
2659
+ // Knob
2660
+ knobSize: [
2661
+ { ...knob, property: 'width' },
2662
+ { ...knob, property: 'height' },
2663
+ ],
2664
+ knobTextColor: { ...knob, property: 'color' },
2665
+ knobRadius: { ...knob, property: 'border-radius' },
2666
+ knobTransition: { ...knob, property: 'transition' },
2667
+ knobColor: { ...knob, property: 'background-color' },
2668
+ knobTopOffset: { ...knob, property: 'top' },
2669
+ knobPosition: { ...knob, property: 'left' },
2670
+
2671
+ // Label
2672
+ labelMargin: [
2673
+ { ...label$3, property: 'padding-left' },
2674
+ { ...checkboxHiddenLabel, property: 'padding-left' }
2675
+ ],
2676
+ labelLineHeight: [
2677
+ { ...label$3, property: 'line-height' },
2678
+ { ...checkboxHiddenLabel, property: 'line-height' }
2679
+ ],
2680
+ labelFontWeight: [
2681
+ { ...label$3, property: 'font-weight' },
2682
+ { ...checkboxHiddenLabel, property: 'font-weight' }
2683
+ ],
2684
+ labelTextColor: [
2685
+ { ...label$3, property: 'color' },
2686
+ { ...requiredIndicator$2, property: 'color' },
2687
+ ],
2688
+ },
2722
2689
  }),
2723
2690
  draggableMixin,
2724
2691
  proxyInputMixin,
2725
- componentNameValidationMixin
2692
+ componentNameValidationMixin,
2693
+ booleanFieldMixin
2726
2694
  )(
2727
2695
  createProxy({
2728
2696
  slots: [],
2729
- wrappedEleName: 'vaadin-text-area',
2730
- style: () => overrides$1,
2697
+ wrappedEleName: 'vaadin-text-field',
2698
+ style: () => `
2699
+ ${commonStyles}
2700
+
2701
+ vaadin-text-field::part(label) {
2702
+ left: calc(var(${SwitchToggleClass.cssVarList.trackWidth}) + var(${SwitchToggleClass.cssVarList.trackBorderWidth}) * 2);
2703
+ }
2704
+
2705
+ vaadin-checkbox[active]::part(checkbox) {
2706
+ transform: none;
2707
+ }
2708
+ vaadin-checkbox[checked]::part(checkbox) {
2709
+ background: none;
2710
+ }
2711
+ vaadin-checkbox::part(checkbox)::after {
2712
+ position: absolute;
2713
+ opacity: 1;
2714
+ content: '';
2715
+ }
2716
+ `,
2731
2717
  excludeAttrsSync: ['tabindex'],
2732
- componentName: componentName$6
2718
+ componentName: componentName$f
2719
+ })
2720
+ );
2721
+
2722
+ const knobMargin = '2px';
2723
+ const checkboxHeight = '1.25em';
2724
+ const trackBorderWidth = '2px';
2725
+
2726
+ const globalRefs$9 = getThemeRefs(globals);
2727
+ const vars$d = SwitchToggleClass.cssVarList;
2728
+
2729
+ const switchToggle = {
2730
+ size: {
2731
+ xs: { [vars$d.fontSize]: '8px' },
2732
+ sm: { [vars$d.fontSize]: '12px' },
2733
+ md: { [vars$d.fontSize]: '16px' },
2734
+ lg: { [vars$d.fontSize]: '20px' },
2735
+ xl: { [vars$d.fontSize]: '24px' }
2736
+ },
2737
+
2738
+ [vars$d.cursor]: 'pointer',
2739
+
2740
+ [vars$d.trackBorderStyle]: 'solid',
2741
+ [vars$d.trackBorderWidth]: trackBorderWidth,
2742
+ [vars$d.trackBorderColor]: globalRefs$9.colors.surface.contrast,
2743
+
2744
+ [vars$d.trackBackgroundColor]: 'none',
2745
+ [vars$d.trackRadius]: globalRefs$9.radius.md,
2746
+ [vars$d.trackWidth]: '2.5em',
2747
+ [vars$d.trackHeight]: checkboxHeight,
2748
+
2749
+ [vars$d.knobSize]: `calc(1em - ${knobMargin})`,
2750
+ [vars$d.knobRadius]: '50%',
2751
+ [vars$d.knobTopOffset]: '1px',
2752
+ [vars$d.knobColor]: globalRefs$9.colors.surface.contrast,
2753
+ [vars$d.knobPosition]: knobMargin,
2754
+ [vars$d.knobTransition]: '0.3s',
2755
+
2756
+ [vars$d.labelTextColor]: globalRefs$9.colors.surface.contrast,
2757
+ [vars$d.labelFontWeight]: '400',
2758
+ [vars$d.labelLineHeight]: `calc(${checkboxHeight} + 0.25em)`,
2759
+ [vars$d.labelMargin]: '0.25em',
2760
+
2761
+ _fullWidth: {
2762
+ [vars$d.width]: '100%',
2763
+ },
2764
+
2765
+ _checked: {
2766
+ [vars$d.trackBorderColor]: globalRefs$9.colors.primary.main,
2767
+ [vars$d.knobPosition]: `calc(100% - var(${vars$d.knobSize}) - ${knobMargin})`,
2768
+ [vars$d.knobColor]: globalRefs$9.colors.primary.main,
2769
+ [vars$d.knobTextColor]: globalRefs$9.colors.primary.contrast,
2770
+ },
2771
+
2772
+ _disabled: {
2773
+ [vars$d.cursor]: 'not-allowed', // todo: fix cursor
2774
+ [vars$d.knobColor]: globalRefs$9.colors.surface.main,
2775
+ [vars$d.trackBorderColor]: globalRefs$9.colors.surface.main,
2776
+ [vars$d.trackBackgroundColor]: globalRefs$9.colors.surface.light,
2777
+ },
2778
+
2779
+ _focused: {
2780
+ [vars$d.switchOutlineWidth]: '2px',
2781
+ [vars$d.switchOutlineOffset]: '1px',
2782
+ [vars$d.switchOutlineColor]: globalRefs$9.colors.primary.main,
2783
+ [vars$d.switchOutlineStyle]: 'solid'
2784
+ },
2785
+
2786
+ _invalid: {
2787
+ [vars$d.switchOutlineColor]: globalRefs$9.colors.error.main,
2788
+ [vars$d.trackBorderColor]: globalRefs$9.colors.error.main,
2789
+ [vars$d.knobColor]: globalRefs$9.colors.error.main,
2790
+ [vars$d.labelTextColor]: globalRefs$9.colors.error.main
2791
+ },
2792
+ };
2793
+
2794
+ var switchToggle$1 = /*#__PURE__*/Object.freeze({
2795
+ __proto__: null,
2796
+ default: switchToggle,
2797
+ vars: vars$d
2798
+ });
2799
+
2800
+ const componentName$e = getComponentName('container');
2801
+
2802
+ class RawContainer extends createBaseClass({ componentName: componentName$e, baseSelector: ':host > slot' }) {
2803
+ constructor() {
2804
+ super();
2805
+
2806
+ this.attachShadow({ mode: 'open' }).innerHTML = `
2807
+ <style>
2808
+ :host > slot {
2809
+ box-sizing: border-box;
2810
+ width: 100%;
2811
+ height: 100%;
2812
+ display: flex;
2813
+ overflow: hidden;
2814
+ }
2815
+ :host {
2816
+ display: inline-block;
2817
+ overflow: auto;
2818
+ }
2819
+ </style>
2820
+ <slot></slot>
2821
+ `;
2822
+ }
2823
+ }
2824
+
2825
+ const ContainerClass = compose(
2826
+ createStyleMixin({
2827
+ mappings: {
2828
+ height: { selector: () => ':host' },
2829
+ width: { selector: () => ':host' },
2830
+
2831
+ verticalPadding: [
2832
+ { property: 'padding-top' },
2833
+ { property: 'padding-bottom' }
2834
+ ],
2835
+ horizontalPadding: [
2836
+ { property: 'padding-left' },
2837
+ { property: 'padding-right' }
2838
+ ],
2839
+
2840
+ flexDirection: {},
2841
+ justifyContent: {},
2842
+ alignItems: {},
2843
+ gap: {},
2844
+ flexWrap: {},
2845
+
2846
+ backgroundColor: {},
2847
+ color: {},
2848
+ borderRadius: {},
2849
+
2850
+ borderColor: {},
2851
+ borderStyle: {},
2852
+ borderWidth: {},
2853
+
2854
+ boxShadow: {}
2855
+ }
2856
+ }),
2857
+ draggableMixin,
2858
+ componentNameValidationMixin
2859
+ )(RawContainer);
2860
+
2861
+ const globalRefs$8 = getThemeRefs(globals);
2862
+
2863
+ const compVars$1 = ContainerClass.cssVarList;
2864
+
2865
+ const verticalAlignment = {
2866
+ start: { verticalAlignment: 'start' },
2867
+ center: { verticalAlignment: 'center' },
2868
+ end: { verticalAlignment: 'end' },
2869
+ };
2870
+
2871
+ const horizontalAlignment = {
2872
+ start: { horizontalAlignment: 'start' },
2873
+ center: { horizontalAlignment: 'center' },
2874
+ end: { horizontalAlignment: 'end' },
2875
+ };
2876
+
2877
+ const [helperTheme$1, helperRefs$1, helperVars$1] =
2878
+ createHelperVars({
2879
+ verticalAlignment,
2880
+ horizontalAlignment,
2881
+ shadowColor: '#00000020' //if we want to support transparency vars, we should use different color format
2882
+ }, componentName$e);
2883
+
2884
+ const container = {
2885
+ ...helperTheme$1,
2886
+ [compVars$1.width]: '100%',
2887
+ [compVars$1.boxShadow]: 'none',
2888
+ [compVars$1.backgroundColor]: globalRefs$8.colors.surface.light,
2889
+ [compVars$1.color]: globalRefs$8.colors.surface.contrast,
2890
+ verticalPadding: {
2891
+ sm: { [compVars$1.verticalPadding]: '5px' },
2892
+ md: { [compVars$1.verticalPadding]: '10px' },
2893
+ lg: { [compVars$1.verticalPadding]: '20px' },
2894
+ },
2895
+ horizontalPadding: {
2896
+ sm: { [compVars$1.horizontalPadding]: '5px' },
2897
+ md: { [compVars$1.horizontalPadding]: '10px' },
2898
+ lg: { [compVars$1.horizontalPadding]: '20px' },
2899
+ },
2900
+ direction: {
2901
+ row: {
2902
+ [compVars$1.flexDirection]: 'row',
2903
+ [compVars$1.alignItems]: helperRefs$1.verticalAlignment,
2904
+ [compVars$1.justifyContent]: helperRefs$1.horizontalAlignment,
2905
+ [compVars$1.flexWrap]: 'wrap',
2906
+ horizontalAlignment: {
2907
+ spaceBetween: { [helperVars$1.horizontalAlignment]: 'space-between' },
2908
+ }
2909
+ },
2910
+
2911
+ column: {
2912
+ [compVars$1.flexDirection]: 'column',
2913
+ [compVars$1.alignItems]: helperRefs$1.horizontalAlignment,
2914
+ [compVars$1.justifyContent]: helperRefs$1.verticalAlignment,
2915
+ verticalAlignment: {
2916
+ spaceBetween: { [helperVars$1.verticalAlignment]: 'space-between' }
2917
+ }
2918
+ },
2919
+ },
2920
+
2921
+ spaceBetween: {
2922
+ sm: {
2923
+ [compVars$1.gap]: '10px'
2924
+ },
2925
+ md: {
2926
+ [compVars$1.gap]: '20px'
2927
+ },
2928
+ lg: {
2929
+ [compVars$1.gap]: '30px'
2930
+ }
2931
+ },
2932
+
2933
+ shadow: {
2934
+ sm: {
2935
+ [compVars$1.boxShadow]: `${globalRefs$8.shadow.wide.sm} ${helperRefs$1.shadowColor}, ${globalRefs$8.shadow.narrow.sm} ${helperRefs$1.shadowColor}`
2936
+ },
2937
+ md: {
2938
+ [compVars$1.boxShadow]: `${globalRefs$8.shadow.wide.md} ${helperRefs$1.shadowColor}, ${globalRefs$8.shadow.narrow.md} ${helperRefs$1.shadowColor}`
2939
+ },
2940
+ lg: {
2941
+ [compVars$1.boxShadow]: `${globalRefs$8.shadow.wide.lg} ${helperRefs$1.shadowColor}, ${globalRefs$8.shadow.narrow.lg} ${helperRefs$1.shadowColor}`
2942
+ },
2943
+ xl: {
2944
+ [compVars$1.boxShadow]: `${globalRefs$8.shadow.wide.xl} ${helperRefs$1.shadowColor}, ${globalRefs$8.shadow.narrow.xl} ${helperRefs$1.shadowColor}`
2945
+ },
2946
+ '2xl': {
2947
+ [helperVars$1.shadowColor]: '#00000050', // mimic daisyUI shadow settings
2948
+ [compVars$1.boxShadow]: `${globalRefs$8.shadow.wide['2xl']} ${helperRefs$1.shadowColor}`
2949
+ },
2950
+ },
2951
+
2952
+ borderRadius: {
2953
+ sm: {
2954
+ [compVars$1.borderRadius]: globalRefs$8.radius.sm
2955
+ },
2956
+ md: {
2957
+ [compVars$1.borderRadius]: globalRefs$8.radius.md
2958
+ },
2959
+ lg: {
2960
+ [compVars$1.borderRadius]: globalRefs$8.radius.lg
2961
+ },
2962
+ xl: {
2963
+ [compVars$1.borderRadius]: globalRefs$8.radius.xl
2964
+ },
2965
+ '2xl': {
2966
+ [compVars$1.borderRadius]: globalRefs$8.radius['2xl']
2967
+ },
2968
+ '3xl': {
2969
+ [compVars$1.borderRadius]: globalRefs$8.radius['3xl']
2970
+ },
2971
+ }
2972
+ };
2973
+ const vars$c = { ...compVars$1, ...helperVars$1 };
2974
+
2975
+ var container$1 = /*#__PURE__*/Object.freeze({
2976
+ __proto__: null,
2977
+ default: container,
2978
+ vars: vars$c
2979
+ });
2980
+
2981
+ const componentName$d = getComponentName('logo');
2982
+
2983
+ let style;
2984
+ const getStyle = () => style;
2985
+
2986
+ class RawLogo extends createBaseClass({ componentName: componentName$d, baseSelector: ':host > div' }) {
2987
+ constructor() {
2988
+ super();
2989
+
2990
+ this.attachShadow({ mode: 'open' }).innerHTML = `
2991
+ <style>
2992
+ ${getStyle()}
2993
+ </style>
2994
+ <div></div>`;
2995
+ }
2996
+ }
2997
+
2998
+ const LogoClass = compose(
2999
+ createStyleMixin({
3000
+ mappings: {
3001
+ height: { selector: () => ':host' },
3002
+ width: { selector: () => ':host' },
3003
+ fallbackUrl: { property: 'content' },
3004
+ url: { property: 'content' },
3005
+ }
3006
+ }),
3007
+ draggableMixin,
3008
+ componentNameValidationMixin
3009
+ )(RawLogo);
3010
+
3011
+ style = `
3012
+ :host {
3013
+ display: inline-flex;
3014
+ }
3015
+ :host > div {
3016
+ display: inline-block;
3017
+ content: var(${LogoClass.cssVarList.url}, var(${LogoClass.cssVarList.fallbackUrl}));
3018
+ max-width: 100%;
3019
+ max-height: 100%;
3020
+ object-fit: contain;
3021
+ margin: auto;
3022
+ }
3023
+ :host([draggable="true"]) > div {
3024
+ pointer-events: none
3025
+ }
3026
+ `;
3027
+
3028
+ const vars$b = LogoClass.cssVarList;
3029
+
3030
+ const logo = {
3031
+ [vars$b.fallbackUrl]: 'url(https://imgs.descope.com/components/no-logo-placeholder.svg)'
3032
+ };
3033
+
3034
+ var logo$1 = /*#__PURE__*/Object.freeze({
3035
+ __proto__: null,
3036
+ default: logo,
3037
+ vars: vars$b
3038
+ });
3039
+
3040
+ const componentName$c = getComponentName('text');
3041
+
3042
+ class RawText extends createBaseClass({ componentName: componentName$c, baseSelector: ':host > slot' }) {
3043
+ constructor() {
3044
+ super();
3045
+
3046
+ this.attachShadow({ mode: 'open' }).innerHTML = `
3047
+ <style>
3048
+ :host {
3049
+ display: inline-block;
3050
+ }
3051
+ :host > slot {
3052
+ width: 100%;
3053
+ display: inline-block;
3054
+ }
3055
+ </style>
3056
+ <slot></slot>
3057
+ `;
3058
+ }
3059
+ }
3060
+
3061
+ const TextClass = compose(
3062
+ createStyleMixin({
3063
+ mappings: {
3064
+ fontFamily: {},
3065
+ lineHeight: {},
3066
+ fontStyle: {},
3067
+ fontSize: {},
3068
+ fontWeight: {},
3069
+ width: { selector: () => ':host' },
3070
+ color: {},
3071
+ letterSpacing: {},
3072
+ textShadow: {},
3073
+ borderWidth: {},
3074
+ borderStyle: {},
3075
+ borderColor: {},
3076
+ textTransform: {},
3077
+ textAlign: {},
3078
+ },
3079
+ }),
3080
+ draggableMixin,
3081
+ componentNameValidationMixin
3082
+ )(RawText);
3083
+
3084
+ const globalRefs$7 = getThemeRefs(globals);
3085
+
3086
+ const vars$a = TextClass.cssVarList;
3087
+
3088
+ const text$2 = {
3089
+ [vars$a.lineHeight]: '1em',
3090
+ [vars$a.textAlign]: 'left',
3091
+ [vars$a.color]: globalRefs$7.colors.surface.dark,
3092
+ variant: {
3093
+ h1: {
3094
+ [vars$a.fontSize]: globalRefs$7.typography.h1.size,
3095
+ [vars$a.fontWeight]: globalRefs$7.typography.h1.weight,
3096
+ [vars$a.fontFamily]: globalRefs$7.typography.h1.font
3097
+ },
3098
+ h2: {
3099
+ [vars$a.fontSize]: globalRefs$7.typography.h2.size,
3100
+ [vars$a.fontWeight]: globalRefs$7.typography.h2.weight,
3101
+ [vars$a.fontFamily]: globalRefs$7.typography.h2.font
3102
+ },
3103
+ h3: {
3104
+ [vars$a.fontSize]: globalRefs$7.typography.h3.size,
3105
+ [vars$a.fontWeight]: globalRefs$7.typography.h3.weight,
3106
+ [vars$a.fontFamily]: globalRefs$7.typography.h3.font
3107
+ },
3108
+ subtitle1: {
3109
+ [vars$a.fontSize]: globalRefs$7.typography.subtitle1.size,
3110
+ [vars$a.fontWeight]: globalRefs$7.typography.subtitle1.weight,
3111
+ [vars$a.fontFamily]: globalRefs$7.typography.subtitle1.font
3112
+ },
3113
+ subtitle2: {
3114
+ [vars$a.fontSize]: globalRefs$7.typography.subtitle2.size,
3115
+ [vars$a.fontWeight]: globalRefs$7.typography.subtitle2.weight,
3116
+ [vars$a.fontFamily]: globalRefs$7.typography.subtitle2.font
3117
+ },
3118
+ body1: {
3119
+ [vars$a.fontSize]: globalRefs$7.typography.body1.size,
3120
+ [vars$a.fontWeight]: globalRefs$7.typography.body1.weight,
3121
+ [vars$a.fontFamily]: globalRefs$7.typography.body1.font
3122
+ },
3123
+ body2: {
3124
+ [vars$a.fontSize]: globalRefs$7.typography.body2.size,
3125
+ [vars$a.fontWeight]: globalRefs$7.typography.body2.weight,
3126
+ [vars$a.fontFamily]: globalRefs$7.typography.body2.font
3127
+ }
3128
+ },
3129
+ mode: {
3130
+ primary: {
3131
+ [vars$a.color]: globalRefs$7.colors.primary.main
3132
+ },
3133
+ secondary: {
3134
+ [vars$a.color]: globalRefs$7.colors.secondary.main
3135
+ },
3136
+ error: {
3137
+ [vars$a.color]: globalRefs$7.colors.error.main
3138
+ },
3139
+ success: {
3140
+ [vars$a.color]: globalRefs$7.colors.success.main
3141
+ }
3142
+ },
3143
+ textAlign: {
3144
+ right: { [vars$a.textAlign]: 'right' },
3145
+ left: { [vars$a.textAlign]: 'left' },
3146
+ center: { [vars$a.textAlign]: 'center' }
3147
+ },
3148
+ _fullWidth: {
3149
+ [vars$a.width]: '100%',
3150
+ },
3151
+ _italic: {
3152
+ [vars$a.fontStyle]: 'italic'
3153
+ },
3154
+ _uppercase: {
3155
+ [vars$a.textTransform]: 'uppercase'
3156
+ },
3157
+ _lowercase: {
3158
+ [vars$a.textTransform]: 'lowercase'
3159
+ }
3160
+ };
3161
+
3162
+ var text$3 = /*#__PURE__*/Object.freeze({
3163
+ __proto__: null,
3164
+ default: text$2,
3165
+ vars: vars$a
3166
+ });
3167
+
3168
+ const componentName$b = getComponentName('link');
3169
+
3170
+ class RawLink extends createBaseClass({ componentName: componentName$b, baseSelector: ':host a' }) {
3171
+ constructor() {
3172
+ super();
3173
+
3174
+ this.attachShadow({ mode: 'open' }).innerHTML = `
3175
+ <style>
3176
+ :host {
3177
+ display: inline-block;
3178
+ }
3179
+ :host a {
3180
+ display: inline-block;
3181
+ }
3182
+ </style>
3183
+ <div>
3184
+ <a>
3185
+ <descope-text>
3186
+ <slot></slot>
3187
+ </descope-text>
3188
+ </a>
3189
+ </div>
3190
+ `;
3191
+
3192
+ forwardAttrs(this, this.shadowRoot.querySelector('a'), {
3193
+ includeAttrs: ['href', 'target', 'tooltip'],
3194
+ mapAttrs: {
3195
+ tooltip: 'title'
3196
+ }
3197
+ });
3198
+
3199
+ forwardAttrs(this, this.shadowRoot.querySelector('descope-text'), {
3200
+ includeAttrs: ['mode', 'variant'],
3201
+ });
3202
+ }
3203
+ }
3204
+
3205
+ const selectors$2 = {
3206
+ host: { selector: () => ':host' },
3207
+ anchor: {},
3208
+ wrapper: { selector: () => ':host > div' },
3209
+ text: { selector: () => TextClass.componentName }
3210
+ };
3211
+
3212
+ const { anchor, text: text$1, host: host$5, wrapper } = selectors$2;
3213
+
3214
+ const LinkClass = compose(
3215
+ createStyleMixin({
3216
+ mappings: {
3217
+ width: host$5,
3218
+ textAlign: wrapper,
3219
+ color: [anchor, { ...text$1, property: TextClass.cssVarList.color }],
3220
+ cursor: anchor,
3221
+ borderBottomWidth: anchor,
3222
+ borderBottomStyle: anchor,
3223
+ borderBottomColor: anchor
3224
+ },
3225
+ }),
3226
+ draggableMixin,
3227
+ componentNameValidationMixin
3228
+ )(RawLink);
3229
+
3230
+ const globalRefs$6 = getThemeRefs(globals);
3231
+ const vars$9 = LinkClass.cssVarList;
3232
+
3233
+ const link = {
3234
+ [vars$9.cursor]: 'pointer',
3235
+ [vars$9.borderBottomWidth]: '2px',
3236
+ [vars$9.borderBottomStyle]: 'solid',
3237
+ [vars$9.borderBottomColor]: 'transparent',
3238
+ [vars$9.color]: globalRefs$6.colors.primary.main,
3239
+
3240
+ _hover: {
3241
+ [vars$9.borderBottomColor]: globalRefs$6.colors.primary.main
3242
+ },
3243
+
3244
+ textAlign: {
3245
+ right: { [vars$9.textAlign]: 'right' },
3246
+ left: { [vars$9.textAlign]: 'left' },
3247
+ center: { [vars$9.textAlign]: 'center' }
3248
+ },
3249
+
3250
+ _fullWidth: {
3251
+ [vars$9.width]: '100%'
3252
+ },
3253
+
3254
+ mode: {
3255
+ primary: {
3256
+ [vars$9.color]: globalRefs$6.colors.primary.main,
3257
+ _hover: {
3258
+ [vars$9.borderBottomColor]: globalRefs$6.colors.primary.main
3259
+ }
3260
+ },
3261
+ secondary: {
3262
+ [vars$9.color]: globalRefs$6.colors.secondary.main,
3263
+ _hover: {
3264
+ [vars$9.borderBottomColor]: globalRefs$6.colors.secondary.main
3265
+ }
3266
+ },
3267
+ error: {
3268
+ [vars$9.color]: globalRefs$6.colors.error.main,
3269
+ _hover: {
3270
+ [vars$9.borderBottomColor]: globalRefs$6.colors.error.main
3271
+ }
3272
+ },
3273
+ success: {
3274
+ [vars$9.color]: globalRefs$6.colors.success.main,
3275
+ _hover: {
3276
+ [vars$9.borderBottomColor]: globalRefs$6.colors.success.main
3277
+ }
3278
+ }
3279
+ }
3280
+ };
3281
+
3282
+ var link$1 = /*#__PURE__*/Object.freeze({
3283
+ __proto__: null,
3284
+ default: link,
3285
+ vars: vars$9
3286
+ });
3287
+
3288
+ const componentName$a = getComponentName('divider');
3289
+ class RawDivider extends createBaseClass({ componentName: componentName$a, baseSelector: ':host > div' }) {
3290
+ constructor() {
3291
+ super();
3292
+
3293
+ this.attachShadow({ mode: 'open' }).innerHTML = `
3294
+ <style>
3295
+ :host {
3296
+ display: inline-block;
3297
+ }
3298
+ :host > div {
3299
+ display: flex;
3300
+ height: 100%;
3301
+ width: 100%;
3302
+ }
3303
+ :host > div::before,
3304
+ :host > div::after {
3305
+ content: '';
3306
+ flex-grow: 1;
3307
+ }
3308
+
3309
+ descope-text {
3310
+ flex-grow: 0;
3311
+ flex-shrink: 0;
3312
+ min-width: fit-content;
3313
+ }
3314
+
3315
+ :host(:empty) descope-text {
3316
+ display: none;
3317
+ }
3318
+
3319
+ :host([vertical="true"]) div {
3320
+ width: fit-content;
3321
+ }
3322
+
3323
+ </style>
3324
+ <div>
3325
+ <descope-text>
3326
+ <slot></slot>
3327
+ </descope-text>
3328
+ </div>
3329
+ `;
3330
+
3331
+ this.textComponent = this.shadowRoot.querySelector('descope-text');
3332
+
3333
+ forwardAttrs(this, this.textComponent, {
3334
+ includeAttrs: ['mode', 'variant', 'italic']
3335
+ });
3336
+ }
3337
+ }
3338
+
3339
+ const selectors$1 = {
3340
+ root: { selector: '' },
3341
+ before: { selector: '::before' },
3342
+ after: { selector: '::after' },
3343
+ text: { selector: 'descope-text' },
3344
+ host: { selector: () => ':host' },
3345
+ };
3346
+
3347
+ const { root: root$1, before, after: after$1, text, host: host$4 } = selectors$1;
3348
+
3349
+ const DividerClass = compose(
3350
+ createStyleMixin({
3351
+ mappings: {
3352
+ maxTextWidth: { ...text, property: 'max-width' },
3353
+ minHeight: root$1,
3354
+ alignItems: root$1,
3355
+ alignSelf: root$1,
3356
+ flexDirection: root$1,
3357
+ textPadding: { ...text, property: 'padding' },
3358
+ width: host$4,
3359
+ padding: host$4,
3360
+ backgroundColor: [before, after$1],
3361
+ opacity: [before, after$1],
3362
+ textWidth: { ...text, property: 'width' },
3363
+ dividerHeight: [{ ...before, property: 'height' }, { ...after$1, property: 'height' }],
3364
+ dividerWidth: [{ ...before, property: 'width' }, { ...after$1, property: 'width' }]
3365
+ },
3366
+ }),
3367
+ draggableMixin,
3368
+ componentNameValidationMixin
3369
+ )(RawDivider);
3370
+
3371
+ const globalRefs$5 = getThemeRefs(globals);
3372
+
3373
+ const compVars = DividerClass.cssVarList;
3374
+
3375
+ const thickness = '2px';
3376
+ const textPaddingSize = '10px';
3377
+ const [helperTheme, helperRefs, helperVars] = createHelperVars({ thickness, textPaddingSize }, componentName$a);
3378
+
3379
+ const divider = {
3380
+ ...helperTheme,
3381
+ [compVars.alignItems]: 'center',
3382
+ [compVars.dividerHeight]: helperRefs.thickness,
3383
+ [compVars.backgroundColor]: globalRefs$5.colors.surface.main,
3384
+ [compVars.textPadding]: `0 ${helperRefs.textPaddingSize}`,
3385
+ [compVars.width]: '100%',
3386
+ [compVars.flexDirection]: 'row',
3387
+ [compVars.alignSelf]: 'strech',
3388
+ [compVars.textWidth]: 'fit-content',
3389
+ [compVars.maxTextWidth]: 'calc(100% - 100px)',
3390
+ _vertical: {
3391
+ [compVars.padding]: `0 calc(${thickness} * 3)`,
3392
+ [compVars.width]: 'fit-content',
3393
+ [compVars.textPadding]: `${helperRefs.textPaddingSize} 0`,
3394
+ [compVars.flexDirection]: 'column',
3395
+ [compVars.minHeight]: '200px',
3396
+ [compVars.textWidth]: 'fit-content',
3397
+ [compVars.dividerWidth]: helperRefs.thickness,
3398
+ [compVars.maxTextWidth]: '100%',
3399
+ }
3400
+ };
3401
+ const vars$8 = { ...compVars, ...helperVars };
3402
+
3403
+ var divider$1 = /*#__PURE__*/Object.freeze({
3404
+ __proto__: null,
3405
+ default: divider,
3406
+ vars: vars$8
3407
+ });
3408
+
3409
+ const componentName$9 = getComponentName('passcode-internal');
3410
+
3411
+ createBaseInputClass({ componentName: componentName$9, baseSelector: 'div' });
3412
+
3413
+ const componentName$8 = getComponentName('passcode');
3414
+
3415
+ const observedAttributes$1 = [
3416
+ 'digits'
3417
+ ];
3418
+
3419
+ const customMixin$2 = (superclass) =>
3420
+ class PasscodeMixinClass extends superclass {
3421
+ static get observedAttributes() {
3422
+ return observedAttributes$1.concat(superclass.observedAttributes || []);
3423
+ }
3424
+
3425
+ constructor() {
3426
+ super();
3427
+ }
3428
+
3429
+ get digits() {
3430
+ return Number.parseInt(this.getAttribute('digits')) || 6;
3431
+ }
3432
+
3433
+ init() {
3434
+ super.init?.();
3435
+ const template = document.createElement('template');
3436
+
3437
+ template.innerHTML = `
3438
+ <${componentName$9}
3439
+ bordered="true"
3440
+ name="code"
3441
+ tabindex="-1"
3442
+ slot="input"
3443
+ ></${componentName$9}>
3444
+ `;
3445
+
3446
+ this.baseElement.appendChild(template.content.cloneNode(true));
3447
+
3448
+ this.inputElement = this.shadowRoot.querySelector(componentName$9);
3449
+
3450
+ forwardAttrs(this, this.inputElement, { includeAttrs: ['digits', 'size'] });
3451
+ }
3452
+
3453
+ attributeChangedCallback(attrName, oldValue, newValue) {
3454
+ super.attributeChangedCallback?.(attrName, oldValue, newValue);
3455
+
3456
+ if (attrName === 'digits') {
3457
+ this.style.setProperty('--passcode-digits-count', newValue);
3458
+ }
3459
+ }
3460
+ };
3461
+
3462
+ const { borderStyle, borderWidth, ...restTextFieldMappings } =
3463
+ textFieldMappings;
3464
+
3465
+ const { digitField, label: label$2, requiredIndicator: requiredIndicator$1, internalWrapper, focusedDigitField } = {
3466
+ focusedDigitField: { selector: () => `${TextFieldClass.componentName}[focused="true"]` },
3467
+ digitField: { selector: () => TextFieldClass.componentName },
3468
+ label: { selector: '::part(label)' },
3469
+ requiredIndicator: { selector: '[required]::part(required-indicator)::after' },
3470
+ internalWrapper: { selector: 'descope-passcode-internal .wrapper' }
3471
+ };
3472
+
3473
+ const textVars$1 = TextFieldClass.cssVarList;
3474
+
3475
+ const PasscodeClass = compose(
3476
+ createStyleMixin({
3477
+ mappings: {
3478
+ ...restTextFieldMappings,
3479
+ borderColor: { ...digitField, property: textVars$1.borderColor },
3480
+ outlineColor: { ...digitField, property: textVars$1.outlineColor },
3481
+ outlineWidth: [
3482
+ { ...digitField, property: textVars$1.outlineWidth },
3483
+ // we want to leave enough space to the digits outline,
3484
+ // ideally, this would be part of the text field
3485
+ { ...internalWrapper, property: 'padding' }
3486
+ ],
3487
+ color: [restTextFieldMappings.color, label$2, requiredIndicator$1],
3488
+ padding: { ...digitField, property: textVars$1.padding },
3489
+ margin: { ...digitField, property: textVars$1.margin },
3490
+ textAlign: { ...digitField, property: textVars$1.textAlign },
3491
+ caretColor: { ...digitField, property: textVars$1.caretColor },
3492
+ digitsGap: { ...internalWrapper, property: 'gap' },
3493
+ focusedDigitFieldOutlineColor: { ...focusedDigitField, property: textVars$1.outlineColor }
3494
+ },
3495
+ }),
3496
+ draggableMixin,
3497
+ proxyInputMixin,
3498
+ componentNameValidationMixin,
3499
+ customMixin$2
3500
+ )(
3501
+ createProxy({
3502
+ slots: [],
3503
+ wrappedEleName: 'vaadin-text-field',
3504
+ style: () => `
3505
+ :host {
3506
+ --vaadin-field-default-width: auto;
3507
+ display: inline-block;
3508
+ max-width: 100%;
3509
+ min-width: calc(var(--passcode-digits-count) * 2em);
3510
+ }
3511
+ :host::after {
3512
+ background-color: transparent;
3513
+ }
3514
+ :host::part(input-field)::after {
3515
+ background-color: transparent;
3516
+ }
3517
+
3518
+ descope-passcode-internal {
3519
+ -webkit-mask-image: none;
3520
+ padding: 0;
3521
+ width: 100%;
3522
+ height: 100%;
3523
+ min-height: initial;
3524
+ }
3525
+
3526
+ descope-passcode-internal .wrapper {
3527
+ box-sizing: border-box;
3528
+ min-height: initial;
3529
+ height: 100%;
3530
+ justify-content: space-between;
3531
+ }
3532
+
3533
+ descope-passcode-internal descope-text-field {
3534
+ min-width: 2em;
3535
+ max-width: var(${textVars$1.height});
3536
+ }
3537
+
3538
+ vaadin-text-field::part(input-field) {
3539
+ background-color: transparent;
3540
+ padding: 0;
3541
+ overflow: hidden;
3542
+ -webkit-mask-image: none;
3543
+ }
3544
+
3545
+ vaadin-text-field {
3546
+ margin: 0;
3547
+ padding: 0;
3548
+ width: 100%
3549
+ }
3550
+
3551
+ vaadin-text-field::before {
3552
+ height: 0;
3553
+ }
3554
+
3555
+ vaadin-text-field[readonly] > input:placeholder-shown {
3556
+ opacity: 1;
3557
+ }
3558
+
3559
+ vaadin-text-field::part(input-field):focus {
3560
+ cursor: text;
3561
+ }
3562
+
3563
+ vaadin-text-field[required]::part(required-indicator)::after {
3564
+ content: "*";
3565
+ }
3566
+ vaadin-text-field[readonly]::part(input-field)::after {
3567
+ border: 0 solid;
3568
+ }
3569
+ `,
3570
+ excludeAttrsSync: ['tabindex'],
3571
+ componentName: componentName$8
3572
+ })
3573
+ );
3574
+
3575
+ const vars$7 = PasscodeClass.cssVarList;
3576
+ const globalRefs$4 = getThemeRefs(globals);
3577
+
3578
+ const passcode = {
3579
+ [vars$7.backgroundColor]: globalRefs$4.colors.surface.light,
3580
+ [vars$7.outlineWidth]: '2px',
3581
+ [vars$7.outlineColor]: 'transparent',
3582
+ [vars$7.padding]: '0',
3583
+ [vars$7.textAlign]: 'center',
3584
+ [vars$7.borderColor]: 'transparent',
3585
+ [vars$7.digitsGap]: '0',
3586
+ [vars$7.focusedDigitFieldOutlineColor]: globalRefs$4.colors.surface.main,
3587
+ [vars$7.color]: globalRefs$4.colors.surface.contrast,
3588
+
3589
+ _hideCursor: {
3590
+ [vars$7.caretColor]: 'transparent',
3591
+ },
3592
+
3593
+ _disabled: {
3594
+ [vars$7.backgroundColor]: globalRefs$4.colors.surface.main
3595
+ },
3596
+
3597
+ _fullWidth: {
3598
+ [vars$7.width]: '100%'
3599
+ },
3600
+
3601
+ _bordered: {
3602
+ [vars$7.borderColor]: globalRefs$4.colors.surface.main
3603
+ },
3604
+
3605
+ _invalid: {
3606
+ [vars$7.borderColor]: globalRefs$4.colors.error.main,
3607
+ [vars$7.color]: globalRefs$4.colors.error.main,
3608
+ [vars$7.focusedDigitFieldOutlineColor]: globalRefs$4.colors.error.light,
3609
+ },
3610
+ };
3611
+
3612
+ var passcode$1 = /*#__PURE__*/Object.freeze({
3613
+ __proto__: null,
3614
+ default: passcode,
3615
+ vars: vars$7
3616
+ });
3617
+
3618
+ const componentName$7 = getComponentName('loader-linear');
3619
+
3620
+ class RawLoaderLinear extends createBaseClass({ componentName: componentName$7, baseSelector: ':host > div' }) {
3621
+ static get componentName() {
3622
+ return componentName$7;
3623
+ }
3624
+ constructor() {
3625
+ super();
3626
+
3627
+ this.attachShadow({ mode: 'open' }).innerHTML = `
3628
+ <style>
3629
+ @keyframes tilt {
3630
+ 0% { transform: translateX(0); }
3631
+ 50% { transform: translateX(400%); }
3632
+ }
3633
+ :host {
3634
+ position: relative;
3635
+ display: flex;
3636
+ }
3637
+ div::after {
3638
+ content: '';
3639
+ animation-name: tilt;
3640
+ position: absolute;
3641
+ left: 0;
3642
+ }
3643
+
3644
+ :host > div {
3645
+ width: 100%;
3646
+ }
3647
+ </style>
3648
+ <div></div>
3649
+ `;
3650
+ }
3651
+ }
3652
+
3653
+ const selectors = {
3654
+ root: {},
3655
+ after: { selector: '::after' },
3656
+ host: { selector: () => ':host' }
3657
+ };
3658
+
3659
+ const { root, after, host: host$3 } = selectors;
3660
+
3661
+ const LoaderLinearClass = compose(
3662
+ createStyleMixin({
3663
+ mappings: {
3664
+ display: root,
3665
+ width: host$3,
3666
+ height: [root, after],
3667
+ borderRadius: [root, after],
3668
+ surfaceColor: [{ property: 'background-color' }],
3669
+ barColor: [{ ...after, property: 'background-color' }],
3670
+ barWidth: { ...after, property: 'width' },
3671
+ animationDuration: [root, after],
3672
+ animationTimingFunction: [root, after],
3673
+ animationIterationCount: [root, after]
3674
+ }
3675
+ }),
3676
+ draggableMixin,
3677
+ componentNameValidationMixin
3678
+ )(RawLoaderLinear);
3679
+
3680
+ const globalRefs$3 = getThemeRefs(globals);
3681
+
3682
+ const vars$6 = LoaderLinearClass.cssVarList;
3683
+
3684
+ const loaderLinear = {
3685
+ [vars$6.display]: 'inline-block',
3686
+ [vars$6.barColor]: globalRefs$3.colors.surface.contrast,
3687
+ [vars$6.barWidth]: '20%',
3688
+ [vars$6.surfaceColor]: globalRefs$3.colors.surface.main,
3689
+ [vars$6.borderRadius]: '4px',
3690
+ [vars$6.animationDuration]: '2s',
3691
+ [vars$6.animationTimingFunction]: 'linear',
3692
+ [vars$6.animationIterationCount]: 'infinite',
3693
+ [vars$6.width]: '100%',
3694
+ size: {
3695
+ xs: {
3696
+ [vars$6.height]: '6px'
3697
+ },
3698
+ sm: {
3699
+ [vars$6.height]: '8px'
3700
+ },
3701
+ md: {
3702
+ [vars$6.height]: '10px'
3703
+ },
3704
+ lg: {
3705
+ [vars$6.height]: '12px'
3706
+ },
3707
+ xl: {
3708
+ [vars$6.height]: '14px'
3709
+ }
3710
+ },
3711
+ mode: {
3712
+ primary: {
3713
+ [vars$6.barColor]: globalRefs$3.colors.primary.main
3714
+ },
3715
+ secondary: {
3716
+ [vars$6.barColor]: globalRefs$3.colors.secondary.main
3717
+ }
3718
+ },
3719
+ _hidden: {
3720
+ [vars$6.display]: 'none'
3721
+ }
3722
+ };
3723
+
3724
+ var loaderLinear$1 = /*#__PURE__*/Object.freeze({
3725
+ __proto__: null,
3726
+ default: loaderLinear,
3727
+ vars: vars$6
3728
+ });
3729
+
3730
+ const componentName$6 = getComponentName('loader-radial');
3731
+
3732
+ class RawLoaderRadial extends createBaseClass({ componentName: componentName$6, baseSelector: ':host > div' }) {
3733
+ constructor() {
3734
+ super();
3735
+
3736
+ this.attachShadow({ mode: 'open' }).innerHTML = `
3737
+ <style>
3738
+ @keyframes spin {
3739
+ 0% { transform: rotate(0deg); }
3740
+ 100% { transform: rotate(360deg); }
3741
+ }
3742
+ :host {
3743
+ position: relative;
3744
+ display: inline-flex;
3745
+ }
3746
+ :host > div {
3747
+ animation-name: spin;
3748
+ }
3749
+ </style>
3750
+ <div></div>
3751
+ `;
3752
+ }
3753
+ }
3754
+
3755
+ const LoaderRadialClass = compose(
3756
+ createStyleMixin({
3757
+ mappings: {
3758
+ display: {},
3759
+ width: {},
3760
+ height: {},
3761
+ spinnerWidth: { property: 'border-width' },
3762
+ spinnerStyle: { property: 'border-style' },
3763
+ spinnerRadius: { property: 'border-radius' },
3764
+ spinnerTopColor: { property: 'border-top-color' },
3765
+ spinnerBottomColor: { property: 'border-bottom-color' },
3766
+ spinnerRightColor: { property: 'border-right-color' },
3767
+ spinnerLeftColor: { property: 'border-left-color' },
3768
+ color: {},
3769
+ animationDuration: {},
3770
+ animationTimingFunction: {},
3771
+ animationIterationCount: {}
3772
+ }
3773
+ }),
3774
+ draggableMixin,
3775
+ componentNameValidationMixin
3776
+ )(RawLoaderRadial);
3777
+
3778
+ const globalRefs$2 = getThemeRefs(globals);
3779
+
3780
+ const vars$5 = LoaderRadialClass.cssVarList;
3781
+
3782
+ const loaderRadial = {
3783
+ [vars$5.display]: 'inline-block',
3784
+ [vars$5.color]: globalRefs$2.colors.surface.contrast,
3785
+ [vars$5.animationDuration]: '2s',
3786
+ [vars$5.animationTimingFunction]: 'linear',
3787
+ [vars$5.animationIterationCount]: 'infinite',
3788
+ [vars$5.spinnerStyle]: 'solid',
3789
+ [vars$5.spinnerWidth]: '4px',
3790
+ [vars$5.spinnerRadius]: '50%',
3791
+ [vars$5.spinnerTopColor]: 'currentColor',
3792
+ [vars$5.spinnerBottomColor]: 'transparent',
3793
+ [vars$5.spinnerRightColor]: 'currentColor',
3794
+ [vars$5.spinnerLeftColor]: 'transparent',
3795
+ size: {
3796
+ xs: {
3797
+ [vars$5.width]: '20px',
3798
+ [vars$5.height]: '20px',
3799
+ [vars$5.spinnerWidth]: '2px'
3800
+ },
3801
+ sm: {
3802
+ [vars$5.width]: '30px',
3803
+ [vars$5.height]: '30px',
3804
+ [vars$5.spinnerWidth]: '3px'
3805
+ },
3806
+ md: {
3807
+ [vars$5.width]: '40px',
3808
+ [vars$5.height]: '40px',
3809
+ [vars$5.spinnerWidth]: '4px'
3810
+ },
3811
+ lg: {
3812
+ [vars$5.width]: '60px',
3813
+ [vars$5.height]: '60px',
3814
+ [vars$5.spinnerWidth]: '5px'
3815
+ },
3816
+ xl: {
3817
+ [vars$5.width]: '80px',
3818
+ [vars$5.height]: '80px',
3819
+ [vars$5.spinnerWidth]: '6px'
3820
+ }
3821
+ },
3822
+ mode: {
3823
+ primary: {
3824
+ [vars$5.color]: globalRefs$2.colors.primary.main
3825
+ },
3826
+ secondary: {
3827
+ [vars$5.color]: globalRefs$2.colors.secondary.main
3828
+ }
3829
+ },
3830
+ _hidden: {
3831
+ [vars$5.display]: 'none'
3832
+ }
3833
+ };
3834
+
3835
+ var loaderRadial$1 = /*#__PURE__*/Object.freeze({
3836
+ __proto__: null,
3837
+ default: loaderRadial,
3838
+ vars: vars$5
3839
+ });
3840
+
3841
+ const componentName$5 = getComponentName('combo-box');
3842
+
3843
+
3844
+ const ComboBoxMixin = (superclass) => class ComboBoxMixinClass extends superclass {
3845
+ constructor() {
3846
+ super();
3847
+ }
3848
+
3849
+ // vaadin api is to set props on their combo box node,
3850
+ // in order to avoid it, we are passing the children of this component
3851
+ // to the items & renderer props, so it will be used as the combo box items
3852
+ #onChildrenChange() {
3853
+ const baseElement = this.shadowRoot.querySelector(this.baseSelector);
3854
+ const items = Array.from(this.children);
3855
+
3856
+ // we want the data-name attribute to be accessible as an object attribute
3857
+ if (items.length) {
3858
+ items.forEach((node) => {
3859
+ Object.defineProperty(node, 'data-name', {
3860
+ value: node.getAttribute('data-name'),
3861
+ });
3862
+ Object.defineProperty(node, 'data-id', {
3863
+ value: node.getAttribute('data-id')
3864
+ });
3865
+ });
3866
+
3867
+ baseElement.items = items;
3868
+
3869
+ baseElement.renderer = (root, combo, model) => {
3870
+ root.innerHTML = model.item.outerHTML;
3871
+ };
3872
+ }
3873
+ }
3874
+
3875
+ // the default vaadin behavior is to attach the overlay to the body when opened
3876
+ // we do not want that because it's difficult to style the overlay in this way
3877
+ // so we override it to open inside the shadow DOM
3878
+ #overrideOverlaySettings() {
3879
+ const overlay = this.baseElement.shadowRoot.querySelector('vaadin-combo-box-overlay');
3880
+
3881
+ overlay._attachOverlay = function () { this.bringToFront(); };
3882
+ overlay._detachOverlay = function () { };
3883
+ overlay._enterModalState = function () { };
3884
+ }
3885
+
3886
+ init() {
3887
+ super.init?.();
3888
+
3889
+ this.#overrideOverlaySettings();
3890
+ observeChildren(this, this.#onChildrenChange.bind(this));
3891
+ }
3892
+ };
3893
+
3894
+ const {
3895
+ host: host$2,
3896
+ input,
3897
+ placeholder,
3898
+ toggle,
3899
+ label: label$1
3900
+ } = {
3901
+ host: { selector: () => ':host' },
3902
+ input: { selector: '::part(input-field)' },
3903
+ placeholder: { selector: '> input:placeholder-shown' },
3904
+ toggle: { selector: '::part(toggle-button)' },
3905
+ label: { selector: '::part(label)' }
3906
+ };
3907
+
3908
+ // const { slotted, selected } = {
3909
+ // slotted: { selector: () => '::slotted(*)' },
3910
+ // selected: { selector: () => '::slotted([selected])' }
3911
+ // }
3912
+
3913
+ const ComboBoxClass = compose(
3914
+ createStyleMixin({
3915
+ mappings: {
3916
+ width: host$2,
3917
+ height: input,
3918
+ padding: input,
3919
+
3920
+ inputBackgroundColor: { ...input, property: 'background-color' },
3921
+ boxShadow: input,
3922
+
3923
+ borderColor: input,
3924
+ borderWidth: input,
3925
+ borderStyle: input,
3926
+ borderRadius: input,
3927
+
3928
+ color: [label$1, input],
3929
+
3930
+ // we apply font-size also on the host so we can set its width with em
3931
+ fontSize: [{}, host$2],
3932
+
3933
+ placeholderColor: { ...placeholder, property: 'color' },
3934
+
3935
+ toggleCursor: { ...toggle, property: 'cursor' },
3936
+ toggleColor: { ...toggle, property: 'color' },
3937
+
3938
+ // we need to use the variables from the portal mixin
3939
+ // so we need to use an arrow function on the selector
3940
+ // for that to work, because ComboBox is not available
3941
+ // at this time.
3942
+ overlayBackground: { property: () => ComboBoxClass.cssVarList.overlay.backgroundColor },
3943
+ overlayBorder: { property: () => ComboBoxClass.cssVarList.overlay.border }
3944
+ }
3945
+ }),
3946
+ draggableMixin,
3947
+ portalMixin({
3948
+ name: 'overlay',
3949
+ selector: '',
3950
+ mappings: {
3951
+ backgroundColor: { selector: 'vaadin-combo-box-scroller' },
3952
+ // TODO: this mapping doesn't work, needs fixing.
3953
+ cursor: { selector: 'vaadin-combo-box-item' },
3954
+ },
3955
+ forward: {
3956
+ include: false,
3957
+ attributes: ['size']
3958
+ },
3959
+ }),
3960
+ proxyInputMixin,
3961
+ componentNameValidationMixin,
3962
+ ComboBoxMixin
3963
+ )(
3964
+ createProxy({
3965
+ slots: ['prefix'],
3966
+ wrappedEleName: 'vaadin-combo-box',
3967
+ style: () => `
3968
+ :host {
3969
+ display: inline-flex;
3970
+ box-sizing: border-box;
3971
+ -webkit-mask-image: none;
3972
+ }
3973
+ vaadin-combo-box {
3974
+ padding: 0;
3975
+ }
3976
+ vaadin-combo-box [slot="input"] {
3977
+ -webkit-mask-image: none;
3978
+ min-height: 0;
3979
+ }
3980
+ vaadin-combo-box::part(input-field) {
3981
+ -webkit-mask-image: none;
3982
+ border-radius: 0;
3983
+ padding: 0;
3984
+ }
3985
+ vaadin-combo-box::part(input-field)::after {
3986
+ opacity: 0;
3987
+ }
3988
+ vaadin-combo-box[readonly]::part(input-field)::after {
3989
+ border: none;
3990
+ }
3991
+ vaadin-combo-box[readonly] > input:placeholder-shown {
3992
+ opacity: 1;
3993
+ }
3994
+ `,
3995
+ // Note: we exclude `size` to avoid overriding Vaadin's ComboBox property
3996
+ // with the same name. Including it will cause Vaadin to calculate NaN size,
3997
+ // and reset items to an empty array, and opening the list box with no items
3998
+ // to display.
3999
+ excludeAttrsSync: ['tabindex', 'size'],
4000
+ componentName: componentName$5,
4001
+ includeForwardProps: ['items', 'renderer', 'selectedItem']
2733
4002
  })
2734
4003
  );
2735
4004
 
2736
- overrides$1 = `
2737
- :host {
2738
- display: inline-block;
2739
- min-width: 10em;
2740
- max-width: 100%;
2741
- }
2742
- vaadin-text-area {
2743
- margin: 0;
2744
- width: 100%;
2745
- box-sizing: border-box;
2746
- }
2747
- vaadin-text-area > label,
2748
- vaadin-text-area::part(input-field) {
2749
- padding: 0;
2750
- }
2751
- vaadin-text-area[required]::part(required-indicator)::after {
2752
- content: "*";
2753
- }
2754
- vaadin-text-area[disabled] > textarea:placeholder-shown,
2755
- vaadin-text-area[readonly] > textarea:placeholder-shown {
2756
- opacity: 1;
2757
- }
2758
- `;
4005
+ const globalRefs$1 = getThemeRefs(globals);
4006
+
4007
+ const vars$4 = ComboBoxClass.cssVarList;
4008
+
4009
+ const comboBox = {
4010
+ [vars$4.borderColor]: globalRefs$1.colors.surface.main,
4011
+ [vars$4.borderWidth]: '1px',
4012
+ [vars$4.borderStyle]: 'solid',
4013
+ [vars$4.cursor]: 'pointer',
4014
+ [vars$4.padding]: '0',
4015
+ [vars$4.placeholderColor]: globalRefs$1.colors.surface.main,
4016
+ [vars$4.toggleColor]: globalRefs$1.colors.surface.contrast,
4017
+ [vars$4.toggleCursor]: 'pointer',
4018
+ [vars$4.inputBackgroundColor]: globalRefs$1.colors.surface.light,
4019
+ [vars$4.padding]: `0 ${globalRefs$1.spacing.xs}`,
4020
+
4021
+ [vars$4.height]: '2em',
4022
+
4023
+ size: {
4024
+ xs: {
4025
+ [vars$4.fontSize]: '8px',
4026
+ },
4027
+ sm: {
4028
+ [vars$4.fontSize]: '10px',
4029
+ },
4030
+ md: {
4031
+ [vars$4.fontSize]: '14px',
4032
+ },
4033
+ lg: {
4034
+ [vars$4.fontSize]: '20px',
4035
+ },
4036
+ xl: {
4037
+ [vars$4.fontSize]: '25px',
4038
+ }
4039
+ },
4040
+
4041
+ _readonly: {
4042
+ [vars$4.toggleCursor]: 'default',
4043
+ },
4044
+
4045
+ _invalid: {
4046
+ [vars$4.borderColor]: globalRefs$1.colors.error.main,
4047
+ [vars$4.placeholderColor]: globalRefs$1.colors.error.light,
4048
+ [vars$4.toggleColor]: globalRefs$1.colors.error.main,
4049
+ },
4050
+ // [vars.overlayCursor]: 'pointer',
4051
+ // [vars.overlayBackground]: globalRefs.colors.surface.light,
4052
+ // [vars.overlayBorder]: `2px solid red`,
4053
+ };
4054
+
4055
+ var comboBox$1 = /*#__PURE__*/Object.freeze({
4056
+ __proto__: null,
4057
+ comboBox: comboBox,
4058
+ default: comboBox,
4059
+ vars: vars$4
4060
+ });
2759
4061
 
2760
4062
  const observedAttributes = ['src', 'alt'];
2761
4063
 
2762
- const componentName$5 = getComponentName('image');
4064
+ const componentName$4 = getComponentName('image');
2763
4065
 
2764
- const BaseClass = createBaseClass({ componentName: componentName$5, baseSelector: ':host > img' });
4066
+ const BaseClass = createBaseClass({ componentName: componentName$4, baseSelector: ':host > img' });
2765
4067
  class RawImage extends BaseClass {
2766
4068
  static get observedAttributes() {
2767
4069
  return observedAttributes.concat(BaseClass.observedAttributes || []);
@@ -2801,6 +4103,16 @@ const ImageClass = compose(
2801
4103
  draggableMixin,
2802
4104
  )(RawImage);
2803
4105
 
4106
+ const vars$3 = ImageClass.cssVarList;
4107
+
4108
+ const image = {};
4109
+
4110
+ var image$1 = /*#__PURE__*/Object.freeze({
4111
+ __proto__: null,
4112
+ default: image,
4113
+ vars: vars$3
4114
+ });
4115
+
2804
4116
  var CountryCodes = [
2805
4117
  {
2806
4118
  name: 'Afghanistan',
@@ -4014,173 +5326,9 @@ var CountryCodes = [
4014
5326
  }
4015
5327
  ].sort((a, b) => (a.name < b.name ? -1 : 1));
4016
5328
 
4017
- const componentName$4 = getComponentName('phone-field-internal');
4018
-
4019
- createBaseInputClass({ componentName: componentName$4, baseSelector: 'div' });
4020
-
4021
- const componentName$3 = getComponentName('combo-box');
4022
-
4023
-
4024
- const ComboBoxMixin = (superclass) => class ComboBoxMixinClass extends superclass {
4025
- constructor() {
4026
- super();
4027
- }
4028
-
4029
- // vaadin api is to set props on their combo box node,
4030
- // in order to avoid it, we are passing the children of this component
4031
- // to the items & renderer props, so it will be used as the combo box items
4032
- #onChildrenChange() {
4033
- const baseElement = this.shadowRoot.querySelector(this.baseSelector);
4034
- const items = Array.from(this.children);
4035
-
4036
- // we want the data-name attribute to be accessible as an object attribute
4037
- if (items.length) {
4038
- items.forEach((node) => {
4039
- Object.defineProperty(node, 'data-name', {
4040
- value: node.getAttribute('data-name'),
4041
- });
4042
- Object.defineProperty(node, 'data-id', {
4043
- value: node.getAttribute('data-id')
4044
- });
4045
- });
4046
-
4047
- baseElement.items = items;
4048
-
4049
- baseElement.renderer = (root, combo, model) => {
4050
- root.innerHTML = model.item.outerHTML;
4051
- };
4052
- }
4053
- }
4054
-
4055
- // the default vaadin behavior is to attach the overlay to the body when opened
4056
- // we do not want that because it's difficult to style the overlay in this way
4057
- // so we override it to open inside the shadow DOM
4058
- #overrideOverlaySettings() {
4059
- const overlay = this.baseElement.shadowRoot.querySelector('vaadin-combo-box-overlay');
4060
-
4061
- overlay._attachOverlay = function () { this.bringToFront(); };
4062
- overlay._detachOverlay = function () { };
4063
- overlay._enterModalState = function () { };
4064
- }
4065
-
4066
- init() {
4067
- super.init?.();
4068
-
4069
- this.#overrideOverlaySettings();
4070
- observeChildren(this, this.#onChildrenChange.bind(this));
4071
- }
4072
- };
4073
-
4074
- const {
4075
- host: host$2,
4076
- input,
4077
- placeholder,
4078
- toggle,
4079
- label: label$1
4080
- } = {
4081
- host: { selector: () => ':host' },
4082
- input: { selector: '::part(input-field)' },
4083
- placeholder: { selector: '> input:placeholder-shown' },
4084
- toggle: { selector: '::part(toggle-button)' },
4085
- label: { selector: '::part(label)' }
4086
- };
4087
-
4088
- // const { slotted, selected } = {
4089
- // slotted: { selector: () => '::slotted(*)' },
4090
- // selected: { selector: () => '::slotted([selected])' }
4091
- // }
4092
-
4093
- const ComboBoxClass = compose(
4094
- createStyleMixin({
4095
- mappings: {
4096
- width: host$2,
4097
- height: input,
4098
- padding: input,
4099
-
4100
- inputBackgroundColor: { ...input, property: 'background-color' },
4101
- boxShadow: input,
4102
-
4103
- borderColor: input,
4104
- borderWidth: input,
4105
- borderStyle: input,
4106
- borderRadius: input,
4107
-
4108
- color: [label$1, input],
4109
-
4110
- // we apply font-size also on the host so we can set its width with em
4111
- fontSize: [{}, host$2],
4112
-
4113
- placeholderColor: { ...placeholder, property: 'color' },
4114
-
4115
- toggleCursor: { ...toggle, property: 'cursor' },
4116
- toggleColor: { ...toggle, property: 'color' },
5329
+ const componentName$3 = getComponentName('phone-field-internal');
4117
5330
 
4118
- // we need to use the variables from the portal mixin
4119
- // so we need to use an arrow function on the selector
4120
- // for that to work, because ComboBox is not available
4121
- // at this time.
4122
- overlayBackground: { property: () => ComboBoxClass.cssVarList.overlay.backgroundColor },
4123
- overlayBorder: { property: () => ComboBoxClass.cssVarList.overlay.border }
4124
- }
4125
- }),
4126
- draggableMixin,
4127
- portalMixin({
4128
- name: 'overlay',
4129
- selector: '',
4130
- mappings: {
4131
- backgroundColor: { selector: 'vaadin-combo-box-scroller' },
4132
- // TODO: this mapping doesn't work, needs fixing.
4133
- cursor: { selector: 'vaadin-combo-box-item' },
4134
- },
4135
- forward: {
4136
- include: false,
4137
- attributes: ['size']
4138
- },
4139
- }),
4140
- proxyInputMixin,
4141
- componentNameValidationMixin,
4142
- ComboBoxMixin
4143
- )(
4144
- createProxy({
4145
- slots: ['prefix'],
4146
- wrappedEleName: 'vaadin-combo-box',
4147
- style: () => `
4148
- :host {
4149
- display: inline-flex;
4150
- box-sizing: border-box;
4151
- -webkit-mask-image: none;
4152
- }
4153
- vaadin-combo-box {
4154
- padding: 0;
4155
- }
4156
- vaadin-combo-box [slot="input"] {
4157
- -webkit-mask-image: none;
4158
- min-height: 0;
4159
- }
4160
- vaadin-combo-box::part(input-field) {
4161
- -webkit-mask-image: none;
4162
- border-radius: 0;
4163
- padding: 0;
4164
- }
4165
- vaadin-combo-box::part(input-field)::after {
4166
- opacity: 0;
4167
- }
4168
- vaadin-combo-box[readonly]::part(input-field)::after {
4169
- border: none;
4170
- }
4171
- vaadin-combo-box[readonly] > input:placeholder-shown {
4172
- opacity: 1;
4173
- }
4174
- `,
4175
- // Note: we exclude `size` to avoid overriding Vaadin's ComboBox property
4176
- // with the same name. Including it will cause Vaadin to calculate NaN size,
4177
- // and reset items to an empty array, and opening the list box with no items
4178
- // to display.
4179
- excludeAttrsSync: ['tabindex', 'size'],
4180
- componentName: componentName$3,
4181
- includeForwardProps: ['items', 'renderer', 'selectedItem']
4182
- })
4183
- );
5331
+ createBaseInputClass({ componentName: componentName$3, baseSelector: 'div' });
4184
5332
 
4185
5333
  const textVars = TextFieldClass.cssVarList;
4186
5334
  const comboVars = ComboBoxClass.cssVarList;
@@ -4203,15 +5351,15 @@ const customMixin$1 = (superclass) =>
4203
5351
  const template = document.createElement('template');
4204
5352
 
4205
5353
  template.innerHTML = `
4206
- <${componentName$4}
5354
+ <${componentName$3}
4207
5355
  tabindex="-1"
4208
5356
  slot="input"
4209
- ></${componentName$4}>
5357
+ ></${componentName$3}>
4210
5358
  `;
4211
5359
 
4212
5360
  this.baseElement.appendChild(template.content.cloneNode(true));
4213
5361
 
4214
- this.inputElement = this.shadowRoot.querySelector(componentName$4);
5362
+ this.inputElement = this.shadowRoot.querySelector(componentName$3);
4215
5363
 
4216
5364
  forwardAttrs(this.shadowRoot.host, this.inputElement, {
4217
5365
  includeAttrs: [
@@ -4386,6 +5534,77 @@ const PhoneFieldClass = compose(
4386
5534
  })
4387
5535
  );
4388
5536
 
5537
+ const globalRefs = getThemeRefs(globals);
5538
+ const vars$2 = PhoneFieldClass.cssVarList;
5539
+
5540
+ const phoneField = {
5541
+ [vars$2.wrapperBorderStyle]: 'solid',
5542
+ [vars$2.wrapperBorderWidth]: '1px',
5543
+ [vars$2.wrapperBorderColor]: 'transparent',
5544
+ [vars$2.wrapperBorderRadius]: globalRefs.radius.xs,
5545
+ [vars$2.placeholderColor]: globalRefs.colors.surface.main,
5546
+ [vars$2.color]: globalRefs.colors.surface.contrast,
5547
+
5548
+ [vars$2.phoneInputWidth]: '10em',
5549
+ [vars$2.countryCodeInputWidth]: '5em',
5550
+
5551
+ [vars$2.inputHeight]: '2em',
5552
+ [vars$2.countryCodeDropdownWidth]: '12em',
5553
+
5554
+ size: {
5555
+ xs: {
5556
+ [vars$2.fontSize]: '8px',
5557
+ },
5558
+ sm: {
5559
+ [vars$2.fontSize]: '20px',
5560
+ },
5561
+ md: {
5562
+ [vars$2.fontSize]: '14px',
5563
+ },
5564
+ lg: {
5565
+ [vars$2.fontSize]: '20px',
5566
+ },
5567
+ xl: {
5568
+ [vars$2.fontSize]: '25px',
5569
+ }
5570
+ },
5571
+
5572
+ _fullWidth: {
5573
+ [vars$2.componentWidth]: '100%',
5574
+ [vars$2.phoneInputWidth]: '100%',
5575
+ [vars$2.countryCodeDropdownWidth]: '100%',
5576
+ },
5577
+
5578
+ _bordered: {
5579
+ [vars$2.wrapperBorderColor]: globalRefs.colors.surface.main
5580
+ },
5581
+
5582
+ [vars$2.outlineStyle]: 'solid',
5583
+ [vars$2.outlineWidth]: '0.1em',
5584
+ [vars$2.outlineColor]: 'transparent',
5585
+
5586
+ _focused: {
5587
+ [vars$2.outlineColor]: globalRefs.colors.surface.main
5588
+ },
5589
+
5590
+ _invalid: {
5591
+ [vars$2.outlineColor]: globalRefs.colors.error.light,
5592
+ [vars$2.color]: globalRefs.colors.error.main,
5593
+ [vars$2.placeholderColor]: globalRefs.colors.error.light,
5594
+ [vars$2.wrapperBorderColor]: globalRefs.colors.error.main
5595
+ },
5596
+
5597
+ // '@overlay': {
5598
+ // overlayItemBackgroundColor: 'red'
5599
+ // }
5600
+ };
5601
+
5602
+ var phoneField$1 = /*#__PURE__*/Object.freeze({
5603
+ __proto__: null,
5604
+ default: phoneField,
5605
+ vars: vars$2
5606
+ });
5607
+
4389
5608
  const componentName$1 = getComponentName('new-password-internal');
4390
5609
 
4391
5610
  const componentName = getComponentName('new-password');
@@ -4510,6 +5729,74 @@ const overrides = `
4510
5729
  }
4511
5730
  `;
4512
5731
 
5732
+ const vars$1 = NewPasswordClass.cssVarList;
5733
+
5734
+ const newPassword = {
5735
+ [vars$1.inputsGap]: '1em',
5736
+
5737
+ _required: {
5738
+ [vars$1.requiredContent]: "'*'",
5739
+ },
5740
+
5741
+ _fullWidth: {
5742
+ [vars$1.componentWidth]: '100%'
5743
+ },
5744
+
5745
+ size: {
5746
+ xs: {
5747
+ [vars$1.fontSize]: '8px',
5748
+ },
5749
+ sm: {
5750
+ [vars$1.fontSize]: '10px',
5751
+ },
5752
+ md: {
5753
+ [vars$1.fontSize]: '14px',
5754
+ },
5755
+ lg: {
5756
+ [vars$1.fontSize]: '20px',
5757
+ },
5758
+ xl: {
5759
+ [vars$1.fontSize]: '25px',
5760
+ }
5761
+ },
5762
+ };
5763
+
5764
+ var newPassword$1 = /*#__PURE__*/Object.freeze({
5765
+ __proto__: null,
5766
+ default: newPassword,
5767
+ vars: vars$1
5768
+ });
5769
+
5770
+ const components = {
5771
+ button: button$1,
5772
+ textField: textField$2,
5773
+ passwordField: passwordField$1,
5774
+ numberField: numberField$1,
5775
+ emailField: emailField$1,
5776
+ textArea: textArea$1,
5777
+ checkbox: checkbox$1,
5778
+ switchToggle: switchToggle$1,
5779
+ container: container$1,
5780
+ logo: logo$1,
5781
+ text: text$3,
5782
+ link: link$1,
5783
+ divider: divider$1,
5784
+ passcode: passcode$1,
5785
+ loaderRadial: loaderRadial$1,
5786
+ loaderLinear: loaderLinear$1,
5787
+ comboBox: comboBox$1,
5788
+ image: image$1,
5789
+ phoneField: phoneField$1,
5790
+ newPassword: newPassword$1,
5791
+ };
5792
+
5793
+
5794
+ const theme = Object.keys(components).reduce((acc, comp) => ({ ...acc, [comp]: components[comp].default }), {});
5795
+ const vars = Object.keys(components).reduce((acc, comp) => ({ ...acc, [comp]: components[comp].vars }), {});
5796
+
5797
+ const defaultTheme = { globals, components: theme };
5798
+ const themeVars = { globals: vars$l, components: vars };
5799
+
4513
5800
  exports.ButtonClass = ButtonClass;
4514
5801
  exports.CheckboxClass = CheckboxClass;
4515
5802
  exports.ContainerClass = ContainerClass;
@@ -4532,10 +5819,13 @@ exports.TextFieldClass = TextFieldClass;
4532
5819
  exports.componentsThemeManager = componentsThemeManager;
4533
5820
  exports.createComponentsTheme = createComponentsTheme;
4534
5821
  exports.createHelperVars = createHelperVars;
5822
+ exports.defaultTheme = defaultTheme;
4535
5823
  exports.genColor = genColor;
4536
5824
  exports.genColors = genColors;
4537
5825
  exports.getThemeRefs = getThemeRefs;
5826
+ exports.getThemeVars = getThemeVars;
4538
5827
  exports.globalsThemeToStyle = globalsThemeToStyle;
4539
5828
  exports.themeToCSSVarsObj = themeToCSSVarsObj;
4540
5829
  exports.themeToStyle = themeToStyle;
5830
+ exports.themeVars = themeVars;
4541
5831
  //# sourceMappingURL=index.cjs.js.map