phoenix_duskmoon 9.3.0 → 9.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "phoenix_duskmoon",
3
- "version": "9.3.0",
3
+ "version": "9.4.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./priv/static/phoenix_duskmoon.js",
@@ -35,17 +35,17 @@
35
35
  "registry": "https://registry.npmjs.org/"
36
36
  },
37
37
  "dependencies": {
38
- "@duskmoon-dev/art-elements": "1.2.0",
39
- "@duskmoon-dev/core": "1.16.1",
40
- "@duskmoon-dev/css-art": "1.16.1",
41
- "@duskmoon-dev/elements": "1.4.0"
38
+ "@duskmoon-dev/art-elements": "1.5.3",
39
+ "@duskmoon-dev/core": "1.17.0",
40
+ "@duskmoon-dev/css-art": "1.17.0",
41
+ "@duskmoon-dev/elements": "1.5.3"
42
42
  },
43
43
  "devDependencies": {
44
- "@mdi/svg": "^7.4.47",
45
- "bootstrap-icons": "^1.13.1",
46
- "postcss": "8.5.9"
44
+ "@mdi/svg": "7.4.47",
45
+ "bootstrap-icons": "1.13.1",
46
+ "postcss": "8.5.15"
47
47
  },
48
48
  "peerDependencies": {
49
- "tailwindcss": "^4.0.0"
49
+ "tailwindcss": "4.3.0"
50
50
  }
51
51
  }
@@ -3548,6 +3548,333 @@
3548
3548
  border-radius: var(--radius-full);
3549
3549
  }
3550
3550
  }
3551
+ @layer components {
3552
+ .chat {
3553
+ display: grid;
3554
+ grid-template-columns: auto minmax(0, 1fr);
3555
+ column-gap: 0.75rem;
3556
+ align-items: end;
3557
+ padding: 0.25rem 0;
3558
+ }
3559
+ .chat-start {
3560
+ grid-template-columns: auto minmax(0, 1fr);
3561
+ }
3562
+ .chat-end {
3563
+ grid-template-columns: minmax(0, 1fr) auto;
3564
+ }
3565
+ .chat-avatar {
3566
+ grid-row: 1 / span 999;
3567
+ grid-column: 1;
3568
+ align-self: start;
3569
+ justify-self: start;
3570
+ }
3571
+ .chat-end .chat-avatar {
3572
+ grid-column: 2;
3573
+ justify-self: end;
3574
+ }
3575
+ .chat > :not(.chat-avatar) {
3576
+ grid-column: 2;
3577
+ justify-self: start;
3578
+ max-width: 100%;
3579
+ margin-bottom: 0.25rem;
3580
+ }
3581
+ .chat-end > :not(.chat-avatar) {
3582
+ grid-column: 1;
3583
+ justify-self: end;
3584
+ }
3585
+ .chat-header, .chat-footer {
3586
+ color: var(--color-on-surface-variant);
3587
+ font-size: 0.75rem;
3588
+ line-height: 1rem;
3589
+ }
3590
+ .chat-header {
3591
+ margin-bottom: 0.125rem;
3592
+ }
3593
+ .chat-footer {
3594
+ margin-top: 0.125rem;
3595
+ margin-bottom: 0;
3596
+ }
3597
+ .chat-bubble {
3598
+ --chat-bubble-bg: var(--color-surface-container-highest);
3599
+ --chat-bubble-fg: var(--color-on-surface);
3600
+ position: relative;
3601
+ max-width: min(80ch, 100%);
3602
+ padding: 0.625rem 0.875rem;
3603
+ border-radius: 1rem;
3604
+ background-color: var(--chat-bubble-bg);
3605
+ color: var(--chat-bubble-fg);
3606
+ box-shadow: inset 0 0 0 1px var(--color-outline-variant);
3607
+ font-size: 0.875rem;
3608
+ line-height: 1.45;
3609
+ overflow-wrap: anywhere;
3610
+ word-break: break-word;
3611
+ }
3612
+ .chat-start .chat-bubble::before, .chat-end .chat-bubble::before, .chat-start .chat-bubble::after, .chat-end .chat-bubble::after {
3613
+ content: "";
3614
+ position: absolute;
3615
+ top: 0;
3616
+ clip-path: polygon(0 0, 100% 0, 100% 100%);
3617
+ }
3618
+ .chat-start .chat-bubble::before {
3619
+ left: -0.625rem;
3620
+ width: 1rem;
3621
+ height: 1rem;
3622
+ background-color: var(--color-outline-variant);
3623
+ }
3624
+ .chat-start .chat-bubble::after {
3625
+ left: -0.5rem;
3626
+ width: calc(1rem - 2px);
3627
+ height: calc(1rem - 2px);
3628
+ top: 1px;
3629
+ background-color: var(--chat-bubble-bg);
3630
+ }
3631
+ .chat-start .chat-bubble {
3632
+ border-top-left-radius: 0;
3633
+ }
3634
+ .chat-end .chat-bubble::before {
3635
+ right: -0.625rem;
3636
+ width: 1rem;
3637
+ height: 1rem;
3638
+ background-color: var(--color-outline-variant);
3639
+ transform: scaleX(-1);
3640
+ }
3641
+ .chat-end .chat-bubble::after {
3642
+ right: -0.5rem;
3643
+ width: calc(1rem - 2px);
3644
+ height: calc(1rem - 2px);
3645
+ top: 1px;
3646
+ background-color: var(--chat-bubble-bg);
3647
+ transform: scaleX(-1);
3648
+ }
3649
+ .chat-end .chat-bubble {
3650
+ border-top-right-radius: 0;
3651
+ }
3652
+ .chat-bubble-primary {
3653
+ --chat-bubble-bg: var(--color-primary-container);
3654
+ --chat-bubble-fg: var(--color-on-primary-container);
3655
+ }
3656
+ .chat-bubble-secondary {
3657
+ --chat-bubble-bg: var(--color-secondary-container);
3658
+ --chat-bubble-fg: var(--color-on-secondary-container);
3659
+ }
3660
+ .chat-bubble-tertiary {
3661
+ --chat-bubble-bg: var(--color-tertiary-container);
3662
+ --chat-bubble-fg: var(--color-on-tertiary-container);
3663
+ }
3664
+ .chat-bubble-info {
3665
+ --chat-bubble-bg: var(--color-info-container);
3666
+ --chat-bubble-fg: var(--color-on-info-container);
3667
+ }
3668
+ .chat-bubble-success {
3669
+ --chat-bubble-bg: var(--color-success-container);
3670
+ --chat-bubble-fg: var(--color-on-success-container);
3671
+ }
3672
+ .chat-bubble-warning {
3673
+ --chat-bubble-bg: var(--color-warning-container);
3674
+ --chat-bubble-fg: var(--color-on-warning-container);
3675
+ }
3676
+ .chat-bubble-error {
3677
+ --chat-bubble-bg: var(--color-error-container);
3678
+ --chat-bubble-fg: var(--color-on-error-container);
3679
+ }
3680
+ .chat-bubble-filled.chat-bubble-primary {
3681
+ --chat-bubble-bg: var(--color-primary);
3682
+ --chat-bubble-fg: var(--color-primary-content);
3683
+ }
3684
+ .chat-bubble-filled.chat-bubble-secondary {
3685
+ --chat-bubble-bg: var(--color-secondary);
3686
+ --chat-bubble-fg: var(--color-secondary-content);
3687
+ }
3688
+ .chat-bubble-filled.chat-bubble-tertiary {
3689
+ --chat-bubble-bg: var(--color-tertiary);
3690
+ --chat-bubble-fg: var(--color-tertiary-content);
3691
+ }
3692
+ .chat-bubble-filled.chat-bubble-info {
3693
+ --chat-bubble-bg: var(--color-info);
3694
+ --chat-bubble-fg: var(--color-info-content);
3695
+ }
3696
+ .chat-bubble-filled.chat-bubble-success {
3697
+ --chat-bubble-bg: var(--color-success);
3698
+ --chat-bubble-fg: var(--color-success-content);
3699
+ }
3700
+ .chat-bubble-filled.chat-bubble-warning {
3701
+ --chat-bubble-bg: var(--color-warning);
3702
+ --chat-bubble-fg: var(--color-warning-content);
3703
+ }
3704
+ .chat-bubble-filled.chat-bubble-error {
3705
+ --chat-bubble-bg: var(--color-error);
3706
+ --chat-bubble-fg: var(--color-error-content);
3707
+ }
3708
+ .chat-bubble-xs {
3709
+ padding: 0.375rem 0.625rem;
3710
+ font-size: 0.75rem;
3711
+ }
3712
+ .chat-bubble-sm {
3713
+ padding: 0.5rem 0.75rem;
3714
+ font-size: 0.8125rem;
3715
+ }
3716
+ .chat-bubble-md {
3717
+ padding: 0.625rem 0.875rem;
3718
+ font-size: 0.875rem;
3719
+ }
3720
+ .chat-bubble-lg {
3721
+ padding: 0.875rem 1.125rem;
3722
+ font-size: 1rem;
3723
+ }
3724
+ .chat-reasoning, .chat-tool {
3725
+ width: min(80ch, 100%);
3726
+ border: 1px solid var(--color-outline);
3727
+ border-radius: var(--radius-sm);
3728
+ background-color: var(--color-surface-container-low);
3729
+ color: var(--color-on-surface);
3730
+ font-size: 0.8125rem;
3731
+ line-height: 1.45;
3732
+ overflow: hidden;
3733
+ }
3734
+ .chat-reasoning > summary, .chat-tool > summary {
3735
+ cursor: pointer;
3736
+ list-style-position: inside;
3737
+ }
3738
+ .chat-reasoning > summary {
3739
+ padding: 0.5rem 0.75rem;
3740
+ color: var(--color-on-surface-variant);
3741
+ font-weight: 500;
3742
+ }
3743
+ .chat-reasoning > :not(summary) {
3744
+ padding: 0 0.75rem 0.75rem;
3745
+ color: var(--color-on-surface-variant);
3746
+ font-style: italic;
3747
+ }
3748
+ .chat-tool-header {
3749
+ display: flex;
3750
+ align-items: center;
3751
+ gap: 0.5rem;
3752
+ padding: 0.5rem 0.75rem;
3753
+ color: var(--color-on-surface);
3754
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
3755
+ font-size: 0.75rem;
3756
+ font-weight: 600;
3757
+ }
3758
+ .chat-tool-status {
3759
+ display: inline-flex;
3760
+ align-items: center;
3761
+ min-height: 1.25rem;
3762
+ padding: 0.125rem 0.5rem;
3763
+ border-radius: 999px;
3764
+ margin-left: auto;
3765
+ font-family: inherit;
3766
+ font-size: 0.6875rem;
3767
+ font-weight: 600;
3768
+ line-height: 1;
3769
+ }
3770
+ .chat-tool-call, .chat-tool-result {
3771
+ padding: 0.75rem;
3772
+ border-top: 1px solid var(--color-outline);
3773
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
3774
+ font-size: 0.75rem;
3775
+ overflow-x: auto;
3776
+ }
3777
+ .chat-tool-result {
3778
+ background-color: var(--color-surface-container);
3779
+ @supports (color: color-mix(in lab, red, red)) {
3780
+ background-color: color-mix(in oklch, var(--color-surface-container) 65%, transparent);
3781
+ }
3782
+ }
3783
+ .chat-tool-pending .chat-tool-status {
3784
+ border: 1px solid var(--color-outline);
3785
+ color: var(--color-on-surface-variant);
3786
+ }
3787
+ .chat-tool-running .chat-tool-status {
3788
+ background-color: var(--color-info-container);
3789
+ color: var(--color-on-info-container);
3790
+ }
3791
+ .chat-tool-running .chat-tool-header::before {
3792
+ content: "";
3793
+ width: 0.875rem;
3794
+ height: 0.875rem;
3795
+ border: 2px solid currentColor;
3796
+ border-top-color: transparent;
3797
+ border-radius: 999px;
3798
+ animation: chat-tool-spin 800ms linear infinite;
3799
+ }
3800
+ .chat-tool-success .chat-tool-status {
3801
+ background-color: var(--color-success-container);
3802
+ color: var(--color-on-success-container);
3803
+ }
3804
+ .chat-tool-error .chat-tool-status {
3805
+ background-color: var(--color-error-container);
3806
+ color: var(--color-on-error-container);
3807
+ }
3808
+ .chat-typing {
3809
+ display: inline-flex;
3810
+ align-items: center;
3811
+ gap: 0.25rem;
3812
+ min-width: 2.25rem;
3813
+ }
3814
+ .chat-typing::before, .chat-typing::after, .chat-typing span {
3815
+ content: "";
3816
+ width: 0.375rem;
3817
+ height: 0.375rem;
3818
+ border-radius: 999px;
3819
+ background-color: currentColor;
3820
+ opacity: 0.55;
3821
+ animation: chat-typing-dot 1.4s ease-in-out infinite;
3822
+ }
3823
+ .chat-typing span {
3824
+ animation-delay: 150ms;
3825
+ }
3826
+ .chat-typing::after {
3827
+ animation-delay: 300ms;
3828
+ }
3829
+ .chat-bubble-streaming::after {
3830
+ content: "";
3831
+ display: inline-block;
3832
+ width: 1px;
3833
+ height: 1em;
3834
+ margin-left: 0.25rem;
3835
+ background-color: currentColor;
3836
+ vertical-align: -0.125em;
3837
+ animation: chat-stream-caret 1s step-end infinite;
3838
+ }
3839
+ .chat-reasoning > summary:focus-visible, .chat-tool > summary:focus-visible {
3840
+ outline: none;
3841
+ box-shadow: 0 0 0 3px currentColor;
3842
+ @supports (color: color-mix(in lab, red, red)) {
3843
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
3844
+ }
3845
+ }
3846
+ @keyframes chat-typing-dot {
3847
+ 0%, 80%, 100% {
3848
+ opacity: 0.45;
3849
+ transform: translateY(0);
3850
+ }
3851
+ 40% {
3852
+ opacity: 1;
3853
+ transform: translateY(-0.1875rem);
3854
+ }
3855
+ }
3856
+ @keyframes chat-stream-caret {
3857
+ 0%, 49% {
3858
+ opacity: 1;
3859
+ }
3860
+ 50%, 100% {
3861
+ opacity: 0;
3862
+ }
3863
+ }
3864
+ @keyframes chat-tool-spin {
3865
+ to {
3866
+ transform: rotate(360deg);
3867
+ }
3868
+ }
3869
+ @media (prefers-reduced-motion: reduce) {
3870
+ .chat-typing::before, .chat-typing::after, .chat-typing span, .chat-bubble-streaming::after, .chat-tool-running .chat-tool-header::before {
3871
+ animation: none;
3872
+ }
3873
+ .chat-bubble-streaming::after {
3874
+ opacity: 1;
3875
+ }
3876
+ }
3877
+ }
3551
3878
  @layer components {
3552
3879
  .chip {
3553
3880
  display: inline-flex;