@descope/web-components-ui 1.0.112 → 1.0.114

Sign up to get free protection for your applications and to get access to all the features.
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