klun-ui 0.3.0 → 0.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/dist/styles.css CHANGED
@@ -3171,6 +3171,125 @@ 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
+ touch-action: none;
3240
+ }
3241
+ .klun-kanban__card:hover {
3242
+ transform: translateY(-1px);
3243
+ }
3244
+ .klun-kanban__card--dragging {
3245
+ opacity: 0.5;
3246
+ cursor: grabbing;
3247
+ }
3248
+ .klun-kanban__card--dropbefore {
3249
+ box-shadow: 0 -2px 0 0 var(--klun-primary-base), inset 0 0 0 1px var(--klun-stroke-soft-200);
3250
+ }
3251
+ .klun-kanban__card--dropafter {
3252
+ box-shadow: 0 2px 0 0 var(--klun-primary-base), inset 0 0 0 1px var(--klun-stroke-soft-200);
3253
+ }
3254
+ .klun-kanban__card-title {
3255
+ font: var(--klun-text-label-sm);
3256
+ color: var(--klun-text-strong-950);
3257
+ }
3258
+ .klun-kanban__card-desc {
3259
+ font: var(--klun-text-paragraph-xs);
3260
+ color: var(--klun-text-sub-600);
3261
+ }
3262
+ .klun-kanban__card-tags {
3263
+ display: flex;
3264
+ flex-wrap: wrap;
3265
+ gap: 4px;
3266
+ }
3267
+ .klun-kanban__card-tags > * {
3268
+ font: var(--klun-text-label-xs);
3269
+ color: var(--klun-text-sub-600);
3270
+ background: var(--klun-bg-weak-50);
3271
+ border-radius: var(--klun-radius-sm);
3272
+ padding: 1px 6px;
3273
+ }
3274
+ .klun-kanban__card-meta {
3275
+ display: flex;
3276
+ align-items: center;
3277
+ gap: 8px;
3278
+ font: var(--klun-text-label-xs);
3279
+ color: var(--klun-text-soft-400);
3280
+ }
3281
+ .klun-kanban__empty {
3282
+ padding: 16px 8px;
3283
+ text-align: center;
3284
+ border: 1px dashed var(--klun-stroke-soft-200);
3285
+ border-radius: var(--klun-radius-lg);
3286
+ font: var(--klun-text-label-xs);
3287
+ color: var(--klun-text-soft-400);
3288
+ }
3289
+ .klun-kanban__footer {
3290
+ padding: 2px;
3291
+ }
3292
+
3174
3293
  /* src/components/data-display/Kbd.css */
3175
3294
  .klun-kbd {
3176
3295
  display: inline-flex;
@@ -4017,6 +4136,12 @@ body {
4017
4136
  }
4018
4137
  .klun-table__td--util {
4019
4138
  width: 40px;
4139
+ cursor: grab;
4140
+ user-select: none;
4141
+ touch-action: none;
4142
+ }
4143
+ .klun-table__td--util:active {
4144
+ cursor: grabbing;
4020
4145
  }
4021
4146
  .klun-table__td--nowrap {
4022
4147
  white-space: nowrap;
@@ -4052,13 +4177,10 @@ body {
4052
4177
  cursor: pointer;
4053
4178
  }
4054
4179
  .klun-table__row--dragging {
4055
- opacity: 0.5;
4056
- }
4057
- .klun-table__row--dropover {
4058
- box-shadow: inset 0 2px 0 var(--klun-primary-base);
4059
- }
4060
- .klun-table__row--dropover-after {
4061
- box-shadow: inset 0 -2px 0 var(--klun-primary-base);
4180
+ position: relative;
4181
+ z-index: 2;
4182
+ background: var(--klun-bg-white-0);
4183
+ box-shadow: var(--klun-shadow-lg);
4062
4184
  }
4063
4185
  .klun-table__row--status-success {
4064
4186
  background: var(--klun-state-success-lighter, var(--klun-green-50));
@@ -4891,6 +5013,87 @@ body {
4891
5013
  flex: 1;
4892
5014
  }
4893
5015
 
5016
+ /* src/components/data-display/VirtualTable.css */
5017
+ .klun-vtable {
5018
+ display: flex;
5019
+ flex-direction: column;
5020
+ border-radius: var(--klun-radius-xl);
5021
+ background: var(--klun-bg-white-0);
5022
+ box-shadow: inset 0 0 0 1px var(--klun-stroke-soft-200);
5023
+ overflow: hidden;
5024
+ }
5025
+ .klun-vtable__head {
5026
+ display: grid;
5027
+ align-items: center;
5028
+ height: 36px;
5029
+ padding: 0 12px;
5030
+ background: var(--klun-bg-weak-50);
5031
+ box-shadow: inset 0 -1px 0 var(--klun-stroke-soft-200);
5032
+ flex: none;
5033
+ }
5034
+ .klun-vtable__th {
5035
+ font: var(--klun-text-label-xs);
5036
+ text-transform: uppercase;
5037
+ letter-spacing: 0.04em;
5038
+ color: var(--klun-text-soft-400);
5039
+ overflow: hidden;
5040
+ text-overflow: ellipsis;
5041
+ white-space: nowrap;
5042
+ }
5043
+ .klun-vtable__th--center,
5044
+ .klun-vtable__td--center {
5045
+ text-align: center;
5046
+ }
5047
+ .klun-vtable__th--right,
5048
+ .klun-vtable__td--right {
5049
+ text-align: right;
5050
+ }
5051
+ .klun-vtable__body {
5052
+ flex: 1;
5053
+ overflow-y: auto;
5054
+ min-height: 0;
5055
+ }
5056
+ .klun-vtable__row {
5057
+ display: grid;
5058
+ align-items: center;
5059
+ padding: 0 12px;
5060
+ box-sizing: border-box;
5061
+ box-shadow: inset 0 -1px 0 var(--klun-stroke-soft-200);
5062
+ }
5063
+ .klun-vtable__row--zebra {
5064
+ background: color-mix(in srgb, var(--klun-bg-weak-50) 55%, transparent);
5065
+ }
5066
+ .klun-vtable__row--clickable {
5067
+ cursor: pointer;
5068
+ }
5069
+ .klun-vtable__row--clickable:hover {
5070
+ background: var(--klun-bg-weak-50);
5071
+ }
5072
+ .klun-vtable__td {
5073
+ font: var(--klun-text-label-sm);
5074
+ color: var(--klun-text-sub-600);
5075
+ overflow: hidden;
5076
+ text-overflow: ellipsis;
5077
+ white-space: nowrap;
5078
+ }
5079
+ .klun-vtable__empty {
5080
+ padding: 40px 12px;
5081
+ text-align: center;
5082
+ font: var(--klun-text-paragraph-sm);
5083
+ color: var(--klun-text-soft-400);
5084
+ }
5085
+ .klun-vtable__foot {
5086
+ flex: none;
5087
+ height: 30px;
5088
+ display: flex;
5089
+ align-items: center;
5090
+ padding: 0 12px;
5091
+ border-top: 1px solid var(--klun-stroke-soft-200);
5092
+ background: var(--klun-bg-weak-50);
5093
+ font: var(--klun-text-label-xs);
5094
+ color: var(--klun-text-soft-400);
5095
+ }
5096
+
4894
5097
  /* src/components/disclosure/Accordion.css */
4895
5098
  .klun-accordion {
4896
5099
  display: flex;
@@ -6827,6 +7030,111 @@ body {
6827
7030
  color: var(--klun-text-soft-400);
6828
7031
  }
6829
7032
 
7033
+ /* src/components/forms/CronEditor.css */
7034
+ .klun-cron {
7035
+ --_h: var(--klun-control-h-sm, 32px);
7036
+ --_font: var(--klun-text-label-sm);
7037
+ --_radius: var(--klun-radius-lg);
7038
+ display: flex;
7039
+ flex-direction: column;
7040
+ gap: 12px;
7041
+ }
7042
+ .klun-cron--medium {
7043
+ --_h: var(--klun-control-h-md, 36px);
7044
+ --_font: var(--klun-text-paragraph-sm);
7045
+ }
7046
+ .klun-cron--disabled {
7047
+ opacity: 0.6;
7048
+ pointer-events: none;
7049
+ }
7050
+ .klun-cron__presets {
7051
+ display: flex;
7052
+ flex-wrap: wrap;
7053
+ gap: 6px;
7054
+ }
7055
+ .klun-cron__preset {
7056
+ height: var(--_h);
7057
+ padding: 0 10px;
7058
+ border: none;
7059
+ border-radius: var(--klun-radius-pill, 999px);
7060
+ cursor: pointer;
7061
+ background: var(--klun-bg-weak-50);
7062
+ color: var(--klun-text-sub-600);
7063
+ font: var(--_font);
7064
+ transition: background var(--klun-duration-fast, 0.15s) var(--klun-ease-out, ease);
7065
+ }
7066
+ .klun-cron__preset:hover {
7067
+ background: var(--klun-primary-lighter);
7068
+ color: var(--klun-primary-base);
7069
+ }
7070
+ .klun-cron__preset[data-active] {
7071
+ background: var(--klun-primary-lighter);
7072
+ color: var(--klun-primary-base);
7073
+ }
7074
+ .klun-cron__fields {
7075
+ display: grid;
7076
+ grid-template-columns: repeat(auto-fit, minmax(110px, 1fr));
7077
+ gap: 10px;
7078
+ }
7079
+ .klun-cron__field,
7080
+ .klun-cron__raw {
7081
+ display: flex;
7082
+ flex-direction: column;
7083
+ gap: 4px;
7084
+ min-width: 0;
7085
+ }
7086
+ .klun-cron__field-label {
7087
+ font: var(--klun-text-label-xs);
7088
+ color: var(--klun-text-soft-400);
7089
+ }
7090
+ .klun-cron__select,
7091
+ .klun-cron__input {
7092
+ width: 100%;
7093
+ height: var(--_h);
7094
+ padding: 0 8px;
7095
+ border: none;
7096
+ border-radius: var(--_radius);
7097
+ background: var(--klun-bg-white-0);
7098
+ box-shadow: inset 0 0 0 1px var(--klun-stroke-soft-200);
7099
+ color: var(--klun-text-strong-950);
7100
+ font: var(--_font);
7101
+ box-sizing: border-box;
7102
+ }
7103
+ .klun-cron__select:focus,
7104
+ .klun-cron__input:focus {
7105
+ outline: none;
7106
+ box-shadow: inset 0 0 0 2px var(--klun-primary-base);
7107
+ }
7108
+ .klun-cron__input {
7109
+ font-family: var(--klun-font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);
7110
+ letter-spacing: 0.04em;
7111
+ }
7112
+ .klun-cron__footer {
7113
+ display: grid;
7114
+ grid-template-columns: minmax(140px, 1fr) minmax(180px, 1.4fr);
7115
+ gap: 10px;
7116
+ align-items: end;
7117
+ }
7118
+ .klun-cron__preview {
7119
+ display: flex;
7120
+ align-items: center;
7121
+ gap: 8px;
7122
+ min-height: var(--_h);
7123
+ padding: 0 10px;
7124
+ border-radius: var(--_radius);
7125
+ background: var(--klun-state-information-lighter, var(--klun-bg-weak-50));
7126
+ color: var(--klun-text-sub-600);
7127
+ font: var(--_font);
7128
+ }
7129
+ .klun-cron__preview i {
7130
+ color: var(--klun-state-information-base, var(--klun-primary-base));
7131
+ }
7132
+ @media (max-width: 520px) {
7133
+ .klun-cron__footer {
7134
+ grid-template-columns: 1fr;
7135
+ }
7136
+ }
7137
+
6830
7138
  /* src/components/forms/DatePicker.css */
6831
7139
  .klun-date-field {
6832
7140
  display: inline-block;
@@ -7801,6 +8109,120 @@ body {
7801
8109
  pointer-events: none;
7802
8110
  }
7803
8111
 
8112
+ /* src/components/forms/RichEditor.css */
8113
+ .klun-rich-editor {
8114
+ display: flex;
8115
+ flex-direction: column;
8116
+ border-radius: var(--klun-radius-lg);
8117
+ background: var(--klun-bg-white-0);
8118
+ box-shadow: inset 0 0 0 1px var(--klun-stroke-soft-200);
8119
+ overflow: hidden;
8120
+ transition: box-shadow var(--klun-duration-fast, 0.15s) var(--klun-ease-out, ease);
8121
+ }
8122
+ .klun-rich-editor:focus-within {
8123
+ 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));
8124
+ }
8125
+ .klun-rich-editor--disabled {
8126
+ opacity: 0.6;
8127
+ pointer-events: none;
8128
+ }
8129
+ .klun-rich-editor__bar {
8130
+ display: flex;
8131
+ align-items: center;
8132
+ gap: 8px;
8133
+ padding: 4px 6px;
8134
+ border-bottom: 1px solid var(--klun-stroke-soft-200);
8135
+ background: var(--klun-bg-weak-50);
8136
+ flex-wrap: wrap;
8137
+ }
8138
+ .klun-rich-editor__bar .klun-rich-editor-toolbar {
8139
+ box-shadow: none;
8140
+ background: transparent;
8141
+ padding: 0;
8142
+ flex: 1;
8143
+ }
8144
+ .klun-rich-editor__source {
8145
+ display: inline-flex;
8146
+ align-items: center;
8147
+ gap: 4px;
8148
+ height: 26px;
8149
+ padding: 0 8px;
8150
+ border: 0;
8151
+ border-radius: var(--klun-radius-sm);
8152
+ background: transparent;
8153
+ color: var(--klun-text-sub-600);
8154
+ font: var(--klun-text-label-xs);
8155
+ cursor: pointer;
8156
+ }
8157
+ .klun-rich-editor__source:hover,
8158
+ .klun-rich-editor__source[data-active] {
8159
+ background: var(--klun-bg-white-0);
8160
+ color: var(--klun-text-strong-950);
8161
+ box-shadow: inset 0 0 0 1px var(--klun-stroke-soft-200);
8162
+ }
8163
+ .klun-rich-editor__sourcearea {
8164
+ border-bottom: 1px solid var(--klun-stroke-soft-200);
8165
+ }
8166
+ .klun-rich-editor__sourcearea textarea {
8167
+ border-radius: 0;
8168
+ }
8169
+ .klun-rich-editor__area {
8170
+ padding: 12px 14px;
8171
+ font: var(--klun-text-paragraph-sm);
8172
+ color: var(--klun-text-strong-950);
8173
+ outline: none;
8174
+ overflow-wrap: anywhere;
8175
+ }
8176
+ .klun-rich-editor__area:empty::before {
8177
+ content: attr(data-placeholder);
8178
+ color: var(--klun-text-soft-400);
8179
+ pointer-events: none;
8180
+ }
8181
+ .klun-rich-editor__area h1 {
8182
+ font: var(--klun-text-title-h4);
8183
+ margin: 12px 0 6px;
8184
+ }
8185
+ .klun-rich-editor__area h2 {
8186
+ font: var(--klun-text-title-h5);
8187
+ margin: 10px 0 4px;
8188
+ }
8189
+ .klun-rich-editor__area p {
8190
+ margin: 0 0 8px;
8191
+ }
8192
+ .klun-rich-editor__area ul,
8193
+ .klun-rich-editor__area ol {
8194
+ margin: 0 0 8px;
8195
+ padding-left: 20px;
8196
+ }
8197
+ .klun-rich-editor__area blockquote {
8198
+ margin: 8px 0;
8199
+ padding: 4px 12px;
8200
+ border-left: 3px solid var(--klun-primary-base);
8201
+ background: var(--klun-bg-weak-50);
8202
+ color: var(--klun-text-sub-600);
8203
+ }
8204
+ .klun-rich-editor__area pre {
8205
+ margin: 8px 0;
8206
+ padding: 10px 12px;
8207
+ border-radius: var(--klun-radius-md);
8208
+ background: var(--klun-bg-strong-950, #0e121b);
8209
+ color: var(--klun-text-white-0, #fff);
8210
+ font-family: var(--klun-font-mono, ui-monospace, monospace);
8211
+ font-size: 12px;
8212
+ overflow-x: auto;
8213
+ }
8214
+ .klun-rich-editor__area a {
8215
+ color: var(--klun-primary-base);
8216
+ text-decoration: underline;
8217
+ }
8218
+ .klun-rich-editor__area img {
8219
+ max-width: 100%;
8220
+ border-radius: var(--klun-radius-md);
8221
+ }
8222
+ .klun-rich-editor__area:focus-visible {
8223
+ outline: none;
8224
+ }
8225
+
7804
8226
  /* src/components/forms/RichEditorToolbar.css */
7805
8227
  .klun-rich-editor-toolbar {
7806
8228
  display: inline-flex;