klun-ui 0.2.2 → 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;
@@ -6056,7 +6255,8 @@ body {
6056
6255
 
6057
6256
  /* src/components/forms/Cascader.css */
6058
6257
  .klun-cascader {
6059
- --_h: 40px;
6258
+ --_h: var(--klun-control-h-lg, 40px);
6259
+ --_px: var(--klun-field-px-md, 12px);
6060
6260
  --_font: var(--klun-text-paragraph-sm);
6061
6261
  --_radius: var(--klun-radius-lg);
6062
6262
  position: relative;
@@ -6064,17 +6264,20 @@ body {
6064
6264
  min-width: 240px;
6065
6265
  }
6066
6266
  .klun-cascader--small {
6067
- --_h: 36px;
6267
+ --_h: var(--klun-control-h-md, 36px);
6268
+ --_px: var(--klun-field-px-sm, 10px);
6068
6269
  --_font: var(--klun-text-paragraph-sm);
6069
6270
  --_radius: var(--klun-radius-lg);
6070
6271
  }
6071
6272
  .klun-cascader--medium {
6072
- --_h: 40px;
6273
+ --_h: var(--klun-control-h-lg, 40px);
6274
+ --_px: var(--klun-field-px-md, 12px);
6073
6275
  --_font: var(--klun-text-paragraph-sm);
6074
6276
  --_radius: var(--klun-radius-lg);
6075
6277
  }
6076
6278
  .klun-cascader--large {
6077
- --_h: 48px;
6279
+ --_h: var(--klun-control-h-xl, 48px);
6280
+ --_px: var(--klun-field-px-lg, 14px);
6078
6281
  --_font: var(--klun-text-paragraph-md);
6079
6282
  --_radius: var(--klun-radius-xl);
6080
6283
  }
@@ -6084,7 +6287,7 @@ body {
6084
6287
  gap: 8px;
6085
6288
  width: 100%;
6086
6289
  height: var(--_h);
6087
- padding: 0 12px;
6290
+ padding: 0 var(--_px);
6088
6291
  border: none;
6089
6292
  border-radius: var(--_radius);
6090
6293
  text-align: left;
@@ -6127,6 +6330,17 @@ body {
6127
6330
  .klun-cascader[data-open] .klun-cascader__caret {
6128
6331
  transform: rotate(180deg);
6129
6332
  }
6333
+ .klun-cascader__clear {
6334
+ display: inline-flex;
6335
+ flex: none;
6336
+ align-items: center;
6337
+ font-size: 16px;
6338
+ color: var(--klun-icon-soft-400);
6339
+ cursor: pointer;
6340
+ }
6341
+ .klun-cascader__clear:hover {
6342
+ color: var(--klun-icon-sub-600);
6343
+ }
6130
6344
  .klun-cascader__panel {
6131
6345
  position: absolute;
6132
6346
  top: calc(100% + 6px);
@@ -6152,7 +6366,7 @@ body {
6152
6366
  align-items: center;
6153
6367
  gap: 8px;
6154
6368
  width: 100%;
6155
- min-height: 34px;
6369
+ min-height: var(--klun-control-h-md, 36px);
6156
6370
  padding: 6px 8px;
6157
6371
  border: none;
6158
6372
  border-radius: var(--klun-radius-md);
@@ -6812,6 +7026,111 @@ body {
6812
7026
  color: var(--klun-text-soft-400);
6813
7027
  }
6814
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
+
6815
7134
  /* src/components/forms/DatePicker.css */
6816
7135
  .klun-date-field {
6817
7136
  display: inline-block;
@@ -7786,6 +8105,120 @@ body {
7786
8105
  pointer-events: none;
7787
8106
  }
7788
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
+
7789
8222
  /* src/components/forms/RichEditorToolbar.css */
7790
8223
  .klun-rich-editor-toolbar {
7791
8224
  display: inline-flex;