klun-ui 0.3.0 → 0.4.0

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/dist/styles.css CHANGED
@@ -3171,6 +3171,124 @@ body {
3171
3171
  color: var(--klun-text-white-0);
3172
3172
  }
3173
3173
 
3174
+ /* src/components/data-display/Kanban.css */
3175
+ .klun-kanban {
3176
+ display: flex;
3177
+ gap: 12px;
3178
+ align-items: flex-start;
3179
+ overflow-x: auto;
3180
+ padding-bottom: 4px;
3181
+ }
3182
+ .klun-kanban__column {
3183
+ flex: 0 0 var(--klun-kanban-col, 280px);
3184
+ display: flex;
3185
+ flex-direction: column;
3186
+ gap: 8px;
3187
+ padding: 10px;
3188
+ border-radius: var(--klun-radius-xl);
3189
+ background: var(--klun-bg-weak-50);
3190
+ box-shadow: inset 0 0 0 1px var(--klun-stroke-soft-200);
3191
+ transition: box-shadow var(--klun-duration-fast, 0.15s) var(--klun-ease-out, ease);
3192
+ }
3193
+ .klun-kanban__column--over {
3194
+ box-shadow: inset 0 0 0 2px var(--klun-primary-base);
3195
+ }
3196
+ .klun-kanban__header {
3197
+ display: flex;
3198
+ align-items: center;
3199
+ gap: 8px;
3200
+ padding: 2px 4px;
3201
+ }
3202
+ .klun-kanban__dot {
3203
+ width: 8px;
3204
+ height: 8px;
3205
+ border-radius: var(--klun-radius-pill);
3206
+ }
3207
+ .klun-kanban__title {
3208
+ flex: 1;
3209
+ min-width: 0;
3210
+ font: var(--klun-text-label-sm);
3211
+ color: var(--klun-text-strong-950);
3212
+ }
3213
+ .klun-kanban__count {
3214
+ font: var(--klun-text-label-xs);
3215
+ color: var(--klun-text-sub-600);
3216
+ background: var(--klun-bg-white-0);
3217
+ border-radius: var(--klun-radius-pill);
3218
+ padding: 1px 8px;
3219
+ }
3220
+ .klun-kanban__count--full {
3221
+ color: var(--klun-state-error-base);
3222
+ }
3223
+ .klun-kanban__list {
3224
+ display: flex;
3225
+ flex-direction: column;
3226
+ gap: 8px;
3227
+ min-height: 60px;
3228
+ }
3229
+ .klun-kanban__card {
3230
+ display: flex;
3231
+ flex-direction: column;
3232
+ gap: 6px;
3233
+ padding: 10px 12px;
3234
+ border-radius: var(--klun-radius-lg);
3235
+ background: var(--klun-bg-white-0);
3236
+ box-shadow: var(--klun-shadow-xs, 0 1px 2px rgba(14, 18, 27, 0.06)), inset 0 0 0 1px var(--klun-stroke-soft-200);
3237
+ cursor: grab;
3238
+ transition: transform var(--klun-duration-fast, 0.15s) var(--klun-ease-out, ease);
3239
+ }
3240
+ .klun-kanban__card:hover {
3241
+ transform: translateY(-1px);
3242
+ }
3243
+ .klun-kanban__card--dragging {
3244
+ opacity: 0.5;
3245
+ cursor: grabbing;
3246
+ }
3247
+ .klun-kanban__card--dropbefore {
3248
+ box-shadow: 0 -2px 0 0 var(--klun-primary-base), inset 0 0 0 1px var(--klun-stroke-soft-200);
3249
+ }
3250
+ .klun-kanban__card--dropafter {
3251
+ box-shadow: 0 2px 0 0 var(--klun-primary-base), inset 0 0 0 1px var(--klun-stroke-soft-200);
3252
+ }
3253
+ .klun-kanban__card-title {
3254
+ font: var(--klun-text-label-sm);
3255
+ color: var(--klun-text-strong-950);
3256
+ }
3257
+ .klun-kanban__card-desc {
3258
+ font: var(--klun-text-paragraph-xs);
3259
+ color: var(--klun-text-sub-600);
3260
+ }
3261
+ .klun-kanban__card-tags {
3262
+ display: flex;
3263
+ flex-wrap: wrap;
3264
+ gap: 4px;
3265
+ }
3266
+ .klun-kanban__card-tags > * {
3267
+ font: var(--klun-text-label-xs);
3268
+ color: var(--klun-text-sub-600);
3269
+ background: var(--klun-bg-weak-50);
3270
+ border-radius: var(--klun-radius-sm);
3271
+ padding: 1px 6px;
3272
+ }
3273
+ .klun-kanban__card-meta {
3274
+ display: flex;
3275
+ align-items: center;
3276
+ gap: 8px;
3277
+ font: var(--klun-text-label-xs);
3278
+ color: var(--klun-text-soft-400);
3279
+ }
3280
+ .klun-kanban__empty {
3281
+ padding: 16px 8px;
3282
+ text-align: center;
3283
+ border: 1px dashed var(--klun-stroke-soft-200);
3284
+ border-radius: var(--klun-radius-lg);
3285
+ font: var(--klun-text-label-xs);
3286
+ color: var(--klun-text-soft-400);
3287
+ }
3288
+ .klun-kanban__footer {
3289
+ padding: 2px;
3290
+ }
3291
+
3174
3292
  /* src/components/data-display/Kbd.css */
3175
3293
  .klun-kbd {
3176
3294
  display: inline-flex;
@@ -4891,6 +5009,87 @@ body {
4891
5009
  flex: 1;
4892
5010
  }
4893
5011
 
5012
+ /* src/components/data-display/VirtualTable.css */
5013
+ .klun-vtable {
5014
+ display: flex;
5015
+ flex-direction: column;
5016
+ border-radius: var(--klun-radius-xl);
5017
+ background: var(--klun-bg-white-0);
5018
+ box-shadow: inset 0 0 0 1px var(--klun-stroke-soft-200);
5019
+ overflow: hidden;
5020
+ }
5021
+ .klun-vtable__head {
5022
+ display: grid;
5023
+ align-items: center;
5024
+ height: 36px;
5025
+ padding: 0 12px;
5026
+ background: var(--klun-bg-weak-50);
5027
+ box-shadow: inset 0 -1px 0 var(--klun-stroke-soft-200);
5028
+ flex: none;
5029
+ }
5030
+ .klun-vtable__th {
5031
+ font: var(--klun-text-label-xs);
5032
+ text-transform: uppercase;
5033
+ letter-spacing: 0.04em;
5034
+ color: var(--klun-text-soft-400);
5035
+ overflow: hidden;
5036
+ text-overflow: ellipsis;
5037
+ white-space: nowrap;
5038
+ }
5039
+ .klun-vtable__th--center,
5040
+ .klun-vtable__td--center {
5041
+ text-align: center;
5042
+ }
5043
+ .klun-vtable__th--right,
5044
+ .klun-vtable__td--right {
5045
+ text-align: right;
5046
+ }
5047
+ .klun-vtable__body {
5048
+ flex: 1;
5049
+ overflow-y: auto;
5050
+ min-height: 0;
5051
+ }
5052
+ .klun-vtable__row {
5053
+ display: grid;
5054
+ align-items: center;
5055
+ padding: 0 12px;
5056
+ box-sizing: border-box;
5057
+ box-shadow: inset 0 -1px 0 var(--klun-stroke-soft-200);
5058
+ }
5059
+ .klun-vtable__row--zebra {
5060
+ background: color-mix(in srgb, var(--klun-bg-weak-50) 55%, transparent);
5061
+ }
5062
+ .klun-vtable__row--clickable {
5063
+ cursor: pointer;
5064
+ }
5065
+ .klun-vtable__row--clickable:hover {
5066
+ background: var(--klun-bg-weak-50);
5067
+ }
5068
+ .klun-vtable__td {
5069
+ font: var(--klun-text-label-sm);
5070
+ color: var(--klun-text-sub-600);
5071
+ overflow: hidden;
5072
+ text-overflow: ellipsis;
5073
+ white-space: nowrap;
5074
+ }
5075
+ .klun-vtable__empty {
5076
+ padding: 40px 12px;
5077
+ text-align: center;
5078
+ font: var(--klun-text-paragraph-sm);
5079
+ color: var(--klun-text-soft-400);
5080
+ }
5081
+ .klun-vtable__foot {
5082
+ flex: none;
5083
+ height: 30px;
5084
+ display: flex;
5085
+ align-items: center;
5086
+ padding: 0 12px;
5087
+ border-top: 1px solid var(--klun-stroke-soft-200);
5088
+ background: var(--klun-bg-weak-50);
5089
+ font: var(--klun-text-label-xs);
5090
+ color: var(--klun-text-soft-400);
5091
+ }
5092
+
4894
5093
  /* src/components/disclosure/Accordion.css */
4895
5094
  .klun-accordion {
4896
5095
  display: flex;
@@ -6827,6 +7026,111 @@ body {
6827
7026
  color: var(--klun-text-soft-400);
6828
7027
  }
6829
7028
 
7029
+ /* src/components/forms/CronEditor.css */
7030
+ .klun-cron {
7031
+ --_h: var(--klun-control-h-sm, 32px);
7032
+ --_font: var(--klun-text-label-sm);
7033
+ --_radius: var(--klun-radius-lg);
7034
+ display: flex;
7035
+ flex-direction: column;
7036
+ gap: 12px;
7037
+ }
7038
+ .klun-cron--medium {
7039
+ --_h: var(--klun-control-h-md, 36px);
7040
+ --_font: var(--klun-text-paragraph-sm);
7041
+ }
7042
+ .klun-cron--disabled {
7043
+ opacity: 0.6;
7044
+ pointer-events: none;
7045
+ }
7046
+ .klun-cron__presets {
7047
+ display: flex;
7048
+ flex-wrap: wrap;
7049
+ gap: 6px;
7050
+ }
7051
+ .klun-cron__preset {
7052
+ height: var(--_h);
7053
+ padding: 0 10px;
7054
+ border: none;
7055
+ border-radius: var(--klun-radius-pill, 999px);
7056
+ cursor: pointer;
7057
+ background: var(--klun-bg-weak-50);
7058
+ color: var(--klun-text-sub-600);
7059
+ font: var(--_font);
7060
+ transition: background var(--klun-duration-fast, 0.15s) var(--klun-ease-out, ease);
7061
+ }
7062
+ .klun-cron__preset:hover {
7063
+ background: var(--klun-primary-lighter);
7064
+ color: var(--klun-primary-base);
7065
+ }
7066
+ .klun-cron__preset[data-active] {
7067
+ background: var(--klun-primary-lighter);
7068
+ color: var(--klun-primary-base);
7069
+ }
7070
+ .klun-cron__fields {
7071
+ display: grid;
7072
+ grid-template-columns: repeat(auto-fit, minmax(110px, 1fr));
7073
+ gap: 10px;
7074
+ }
7075
+ .klun-cron__field,
7076
+ .klun-cron__raw {
7077
+ display: flex;
7078
+ flex-direction: column;
7079
+ gap: 4px;
7080
+ min-width: 0;
7081
+ }
7082
+ .klun-cron__field-label {
7083
+ font: var(--klun-text-label-xs);
7084
+ color: var(--klun-text-soft-400);
7085
+ }
7086
+ .klun-cron__select,
7087
+ .klun-cron__input {
7088
+ width: 100%;
7089
+ height: var(--_h);
7090
+ padding: 0 8px;
7091
+ border: none;
7092
+ border-radius: var(--_radius);
7093
+ background: var(--klun-bg-white-0);
7094
+ box-shadow: inset 0 0 0 1px var(--klun-stroke-soft-200);
7095
+ color: var(--klun-text-strong-950);
7096
+ font: var(--_font);
7097
+ box-sizing: border-box;
7098
+ }
7099
+ .klun-cron__select:focus,
7100
+ .klun-cron__input:focus {
7101
+ outline: none;
7102
+ box-shadow: inset 0 0 0 2px var(--klun-primary-base);
7103
+ }
7104
+ .klun-cron__input {
7105
+ font-family: var(--klun-font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);
7106
+ letter-spacing: 0.04em;
7107
+ }
7108
+ .klun-cron__footer {
7109
+ display: grid;
7110
+ grid-template-columns: minmax(140px, 1fr) minmax(180px, 1.4fr);
7111
+ gap: 10px;
7112
+ align-items: end;
7113
+ }
7114
+ .klun-cron__preview {
7115
+ display: flex;
7116
+ align-items: center;
7117
+ gap: 8px;
7118
+ min-height: var(--_h);
7119
+ padding: 0 10px;
7120
+ border-radius: var(--_radius);
7121
+ background: var(--klun-state-information-lighter, var(--klun-bg-weak-50));
7122
+ color: var(--klun-text-sub-600);
7123
+ font: var(--_font);
7124
+ }
7125
+ .klun-cron__preview i {
7126
+ color: var(--klun-state-information-base, var(--klun-primary-base));
7127
+ }
7128
+ @media (max-width: 520px) {
7129
+ .klun-cron__footer {
7130
+ grid-template-columns: 1fr;
7131
+ }
7132
+ }
7133
+
6830
7134
  /* src/components/forms/DatePicker.css */
6831
7135
  .klun-date-field {
6832
7136
  display: inline-block;
@@ -7801,6 +8105,120 @@ body {
7801
8105
  pointer-events: none;
7802
8106
  }
7803
8107
 
8108
+ /* src/components/forms/RichEditor.css */
8109
+ .klun-rich-editor {
8110
+ display: flex;
8111
+ flex-direction: column;
8112
+ border-radius: var(--klun-radius-lg);
8113
+ background: var(--klun-bg-white-0);
8114
+ box-shadow: inset 0 0 0 1px var(--klun-stroke-soft-200);
8115
+ overflow: hidden;
8116
+ transition: box-shadow var(--klun-duration-fast, 0.15s) var(--klun-ease-out, ease);
8117
+ }
8118
+ .klun-rich-editor:focus-within {
8119
+ box-shadow: inset 0 0 0 1px var(--klun-primary-base), 0 0 0 3px var(--klun-primary-alpha-10, rgba(51, 92, 255, 0.12));
8120
+ }
8121
+ .klun-rich-editor--disabled {
8122
+ opacity: 0.6;
8123
+ pointer-events: none;
8124
+ }
8125
+ .klun-rich-editor__bar {
8126
+ display: flex;
8127
+ align-items: center;
8128
+ gap: 8px;
8129
+ padding: 4px 6px;
8130
+ border-bottom: 1px solid var(--klun-stroke-soft-200);
8131
+ background: var(--klun-bg-weak-50);
8132
+ flex-wrap: wrap;
8133
+ }
8134
+ .klun-rich-editor__bar .klun-rich-editor-toolbar {
8135
+ box-shadow: none;
8136
+ background: transparent;
8137
+ padding: 0;
8138
+ flex: 1;
8139
+ }
8140
+ .klun-rich-editor__source {
8141
+ display: inline-flex;
8142
+ align-items: center;
8143
+ gap: 4px;
8144
+ height: 26px;
8145
+ padding: 0 8px;
8146
+ border: 0;
8147
+ border-radius: var(--klun-radius-sm);
8148
+ background: transparent;
8149
+ color: var(--klun-text-sub-600);
8150
+ font: var(--klun-text-label-xs);
8151
+ cursor: pointer;
8152
+ }
8153
+ .klun-rich-editor__source:hover,
8154
+ .klun-rich-editor__source[data-active] {
8155
+ background: var(--klun-bg-white-0);
8156
+ color: var(--klun-text-strong-950);
8157
+ box-shadow: inset 0 0 0 1px var(--klun-stroke-soft-200);
8158
+ }
8159
+ .klun-rich-editor__sourcearea {
8160
+ border-bottom: 1px solid var(--klun-stroke-soft-200);
8161
+ }
8162
+ .klun-rich-editor__sourcearea textarea {
8163
+ border-radius: 0;
8164
+ }
8165
+ .klun-rich-editor__area {
8166
+ padding: 12px 14px;
8167
+ font: var(--klun-text-paragraph-sm);
8168
+ color: var(--klun-text-strong-950);
8169
+ outline: none;
8170
+ overflow-wrap: anywhere;
8171
+ }
8172
+ .klun-rich-editor__area:empty::before {
8173
+ content: attr(data-placeholder);
8174
+ color: var(--klun-text-soft-400);
8175
+ pointer-events: none;
8176
+ }
8177
+ .klun-rich-editor__area h1 {
8178
+ font: var(--klun-text-title-h4);
8179
+ margin: 12px 0 6px;
8180
+ }
8181
+ .klun-rich-editor__area h2 {
8182
+ font: var(--klun-text-title-h5);
8183
+ margin: 10px 0 4px;
8184
+ }
8185
+ .klun-rich-editor__area p {
8186
+ margin: 0 0 8px;
8187
+ }
8188
+ .klun-rich-editor__area ul,
8189
+ .klun-rich-editor__area ol {
8190
+ margin: 0 0 8px;
8191
+ padding-left: 20px;
8192
+ }
8193
+ .klun-rich-editor__area blockquote {
8194
+ margin: 8px 0;
8195
+ padding: 4px 12px;
8196
+ border-left: 3px solid var(--klun-primary-base);
8197
+ background: var(--klun-bg-weak-50);
8198
+ color: var(--klun-text-sub-600);
8199
+ }
8200
+ .klun-rich-editor__area pre {
8201
+ margin: 8px 0;
8202
+ padding: 10px 12px;
8203
+ border-radius: var(--klun-radius-md);
8204
+ background: var(--klun-bg-strong-950, #0e121b);
8205
+ color: var(--klun-text-white-0, #fff);
8206
+ font-family: var(--klun-font-mono, ui-monospace, monospace);
8207
+ font-size: 12px;
8208
+ overflow-x: auto;
8209
+ }
8210
+ .klun-rich-editor__area a {
8211
+ color: var(--klun-primary-base);
8212
+ text-decoration: underline;
8213
+ }
8214
+ .klun-rich-editor__area img {
8215
+ max-width: 100%;
8216
+ border-radius: var(--klun-radius-md);
8217
+ }
8218
+ .klun-rich-editor__area:focus-visible {
8219
+ outline: none;
8220
+ }
8221
+
7804
8222
  /* src/components/forms/RichEditorToolbar.css */
7805
8223
  .klun-rich-editor-toolbar {
7806
8224
  display: inline-flex;